blob: ea24a71feb55acc2a4f65763a56be7750145b083 [file] [log] [blame]
Matus Fabianf468e232016-12-02 06:00:53 -08001/* Hey Emacs use -*- mode: C -*- */
2/*
3 * Copyright (c) 2016 Cisco and/or its affiliates.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Neale Ranns4d5b9172018-10-24 02:57:49 -070017option version = "2.1.1";
18
19import "vnet/ip/ip_types.api";
20import "vnet/ethernet/ethernet_types.api";
Dave Barach0d056e52017-09-28 15:11:16 -040021
Matus Fabianf468e232016-12-02 06:00:53 -080022/** \brief Reply to l2_xconnect_dump
23 @param context - sender context which was passed in the request
24 @param rx_sw_if_index - Receive interface index
25 @param tx_sw_if_index - Transmit interface index
26 */
27define l2_xconnect_details
28{
29 u32 context;
30 u32 rx_sw_if_index;
31 u32 tx_sw_if_index;
32};
33
34/** \brief Dump L2 XConnects
35 @param client_index - opaque cookie to identify the sender
36 @param context - sender context, to match reply w/ request
37*/
38define l2_xconnect_dump
39{
40 u32 client_index;
41 u32 context;
42};
43
Ole Troan01384fe2017-05-12 11:55:35 +020044/** \brief l2 fib table details structure
Pavel Kotucek0f971d82017-01-03 10:48:54 +010045 @param bd_id - the l2 fib / bridge domain table id
46 @param mac - the entry's mac address
47 @param sw_if_index - index of the interface
48 @param static_mac - the entry is statically configured.
49 @param filter_mac - the entry is a mac filter entry.
50 @param bvi_mac - the mac address is a bridge virtual interface
51*/
Ole Troan01384fe2017-05-12 11:55:35 +020052define l2_fib_table_details
Pavel Kotucek0f971d82017-01-03 10:48:54 +010053{
54 u32 context;
55 u32 bd_id;
Mohsin Kazmi57938f62017-10-27 21:28:07 +020056 u8 mac[6];
Pavel Kotucek0f971d82017-01-03 10:48:54 +010057 u32 sw_if_index;
58 u8 static_mac;
59 u8 filter_mac;
60 u8 bvi_mac;
61};
62
63/** \brief Dump l2 fib (aka bridge domain) table
64 @param client_index - opaque cookie to identify the sender
65 @param bd_id - the l2 fib / bridge domain table identifier
66*/
67define l2_fib_table_dump
68{
69 u32 client_index;
70 u32 context;
71 u32 bd_id;
72};
73
74/** \brief L2 fib clear table request, clear all mac entries in the l2 fib
75 @param client_index - opaque cookie to identify the sender
76 @param context - sender context, to match reply w/ request
77*/
Dave Barach11b8dbf2017-04-24 10:46:54 -040078autoreply define l2_fib_clear_table
Pavel Kotucek0f971d82017-01-03 10:48:54 +010079{
80 u32 client_index;
81 u32 context;
82};
83
Eyal Bari7537e712017-04-27 14:07:55 +030084/** \brief L2 FIB flush all entries
85 @param client_index - opaque cookie to identify the sender
86 @param context - sender context, to match reply w/ request
87*/
88autoreply define l2fib_flush_all
89{
90 u32 client_index;
91 u32 context;
92};
93
Eyal Barif24991c2017-04-05 05:33:21 +030094/** \brief L2 FIB flush bridge domain entries
95 @param client_index - opaque cookie to identify the sender
96 @param context - sender context, to match reply w/ request
97 @param bd_id - the entry's bridge domain id
98*/
Dave Barach11b8dbf2017-04-24 10:46:54 -040099autoreply define l2fib_flush_bd
Eyal Barif24991c2017-04-05 05:33:21 +0300100{
101 u32 client_index;
102 u32 context;
103 u32 bd_id;
104};
105
Eyal Barif24991c2017-04-05 05:33:21 +0300106/** \brief L2 FIB flush interface entries
107 @param client_index - opaque cookie to identify the sender
108 @param context - sender context, to match reply w/ request
109 @param bd_id - the entry's bridge domain id
110*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400111autoreply define l2fib_flush_int
Eyal Barif24991c2017-04-05 05:33:21 +0300112{
113 u32 client_index;
114 u32 context;
115 u32 sw_if_index;
116};
117
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100118/** \brief L2 FIB add entry request
119 @param client_index - opaque cookie to identify the sender
120 @param context - sender context, to match reply w/ request
121 @param mac - the entry's mac address
122 @param bd_id - the entry's bridge domain id
123 @param sw_if_index - the interface
124 @param is_add - If non zero add the entry, else delete it
125 @param static_mac -
126 @param filter_mac -
127*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400128autoreply define l2fib_add_del
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100129{
130 u32 client_index;
131 u32 context;
Mohsin Kazmi57938f62017-10-27 21:28:07 +0200132 u8 mac[6];
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100133 u32 bd_id;
134 u32 sw_if_index;
135 u8 is_add;
136 u8 static_mac;
137 u8 filter_mac;
138 u8 bvi_mac;
139};
140
Paul Vinciguerrabdc0e6b2018-09-22 05:32:50 -0700141/** \brief Register to receive L2 MAC events for learned and aged MAC
John Lo8d00fff2017-08-03 00:35:36 -0400142 @param client_index - opaque cookie to identify the sender
143 @param context - sender context, to match reply w/ request
144 @param learn_limit - MAC learn limit, 0 => default to 1000
145 @param scan_delay - event scan delay in 10 msec unit, 0 => default to 100 msec
146 @param max_macs_in_event - in units of 10 mac entries, 0 => default to 100 entries
147 @param enable_disable - 1 => register for MAC events, 0 => cancel registration
148 @param pid - sender's pid
149*/
150autoreply define want_l2_macs_events
151{
152 u32 client_index;
153 u32 context;
154 u32 learn_limit;
155 u8 scan_delay;
156 u8 max_macs_in_event;
157 u8 enable_disable;
158 u32 pid;
159};
160
161/** \brief Entry for learned or aged MAC in L2 MAC Events
162 @param sw_if_index - sw_if_index in the domain
163 @param mac_addr - mac_address
John Loe23c99e2018-03-13 21:53:18 -0400164 @param action - 0 => newly learned MAC, 1 => MAC deleted by ager
165 3 => MAC move (sw_if_index changed)
166 @param flags - flag bits to provide other info, not yet used
John Lo8d00fff2017-08-03 00:35:36 -0400167*/
168typeonly define mac_entry
169{
170 u32 sw_if_index;
171 u8 mac_addr[6];
John Loe23c99e2018-03-13 21:53:18 -0400172 u8 action;
173 u8 flags;
John Lo8d00fff2017-08-03 00:35:36 -0400174};
175
176/** \brief L2 MAC event for a list of learned or aged MACs
177 @param client_index - opaque cookie to identify the sender
178 @param pid - client pid registered to receive notification
Paul Vinciguerrabdc0e6b2018-09-22 05:32:50 -0700179 @param n_macs - number of learned/aged MAC entries
John Lo8d00fff2017-08-03 00:35:36 -0400180 @param mac - array of learned/aged MAC entries
181*/
182define l2_macs_event
183{
184 u32 client_index;
185 u32 pid;
186 u32 n_macs;
187 vl_api_mac_entry_t mac[n_macs];
188};
189
Marek Gradzki51e59682018-03-06 10:05:44 +0100190service {
191 rpc want_l2_macs_events returns want_l2_macs_events_reply
192 events l2_macs_event;
193};
194
John Lo8d00fff2017-08-03 00:35:36 -0400195/** \brief Set interface L2 flags (such as L2_LEARN, L2_FWD,
196 L2_FLOOD, L2_UU_FLOOD, or L2_ARP_TERM bits). This can be used
197 to disable one or more of the features represented by the
198 flag bits on an interface to override what is set as default
199 for all interfaces in the bridge domain
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100200 @param client_index - opaque cookie to identify the sender
201 @param context - sender context, to match reply w/ request
202 @param sw_if_index - interface
203 @param is_set - if non-zero, set the bits, else clear them
John Lo8d00fff2017-08-03 00:35:36 -0400204 @param feature_bitmap - non-zero bits (as above) to set or clear
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100205*/
206define l2_flags
207{
208 u32 client_index;
209 u32 context;
210 u32 sw_if_index;
211 u8 is_set;
212 u32 feature_bitmap;
213};
214
John Lo8d00fff2017-08-03 00:35:36 -0400215/** \brief Set interface L2 flags response
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100216 @param context - sender context, to match reply w/ request
217 @param retval - return code for the set l2 bits request
John Lo8d00fff2017-08-03 00:35:36 -0400218 @param resulting_feature_bitmap - the internal l2 feature bitmap after the request is implemented
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100219*/
220define l2_flags_reply
221{
222 u32 context;
223 i32 retval;
224 u32 resulting_feature_bitmap;
225};
226
Eyal Barifead6702017-04-04 04:46:32 +0300227/** \brief L2 bridge domain set mac age
228 @param client_index - opaque cookie to identify the sender
229 @param context - sender context, to match reply w/ request
230 @param bd_id - the bridge domain to create
231 @param mac_age - mac aging time in min, 0 for disabled
232*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400233autoreply define bridge_domain_set_mac_age
Eyal Barifead6702017-04-04 04:46:32 +0300234{
235 u32 client_index;
236 u32 context;
237 u32 bd_id;
238 u8 mac_age;
239};
240
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100241/** \brief L2 bridge domain add or delete request
242 @param client_index - opaque cookie to identify the sender
243 @param context - sender context, to match reply w/ request
244 @param bd_id - the bridge domain to create
245 @param flood - enable/disable bcast/mcast flooding in the bd
Paul Vinciguerrabdc0e6b2018-09-22 05:32:50 -0700246 @param uu_flood - enable/disable unknown unicast flood in the bd
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100247 @param forward - enable/disable forwarding on all interfaces in the bd
248 @param learn - enable/disable learning on all interfaces in the bd
249 @param arp_term - enable/disable arp termination in the bd
250 @param mac_age - mac aging time in min, 0 for disabled
251 @param is_add - add or delete flag
252*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400253autoreply define bridge_domain_add_del
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100254{
255 u32 client_index;
256 u32 context;
257 u32 bd_id;
258 u8 flood;
259 u8 uu_flood;
260 u8 forward;
261 u8 learn;
262 u8 arp_term;
263 u8 mac_age;
Jerome Tollet48304142017-09-05 12:13:22 +0100264 u8 bd_tag[64];
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100265 u8 is_add;
266};
267
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100268/** \brief L2 bridge domain request operational state details
269 @param client_index - opaque cookie to identify the sender
270 @param context - sender context, to match reply w/ request
271 @param bd_id - the bridge domain id desired or ~0 to request all bds
272*/
273define bridge_domain_dump
274{
275 u32 client_index;
276 u32 context;
277 u32 bd_id;
278};
279
Ole Troan01384fe2017-05-12 11:55:35 +0200280/** \brief L2 bridge domain sw interface operational state response
281 @param bd_id - the bridge domain id
282 @param sw_if_index - sw_if_index in the domain
283 @param shg - split horizon group for the interface
284*/
285typeonly manual_print manual_endian define bridge_domain_sw_if
286{
287 u32 context;
288 u32 sw_if_index;
289 u8 shg;
290};
291
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100292/** \brief L2 bridge domain operational state response
293 @param bd_id - the bridge domain id
294 @param flood - bcast/mcast flooding state on all interfaces in the bd
Paul Vinciguerrabdc0e6b2018-09-22 05:32:50 -0700295 @param uu_flood - unknown unicast flooding state on all interfaces in the bd
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100296 @param forward - forwarding state on all interfaces in the bd
297 @param learn - learning state on all interfaces in the bd
298 @param arp_term - arp termination state on all interfaces in the bd
299 @param mac_age - mac aging time in min, 0 for disabled
Jerome Tollet50570ec2017-09-14 12:53:56 +0100300 @param bd_tag - optional textual tag for the bridge domain
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100301 @param n_sw_ifs - number of sw_if_index's in the domain
302*/
Ole Troan01384fe2017-05-12 11:55:35 +0200303manual_print manual_endian define bridge_domain_details
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100304{
305 u32 context;
306 u32 bd_id;
307 u8 flood;
308 u8 uu_flood;
309 u8 forward;
310 u8 learn;
311 u8 arp_term;
312 u8 mac_age;
Jerome Tollet48304142017-09-05 12:13:22 +0100313 u8 bd_tag[64];
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100314 u32 bvi_sw_if_index;
Neale Rannsb4743802018-09-05 09:13:57 -0700315 u32 uu_fwd_sw_if_index;
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100316 u32 n_sw_ifs;
Ole Troan01384fe2017-05-12 11:55:35 +0200317 vl_api_bridge_domain_sw_if_t sw_if_details[n_sw_ifs];
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100318};
319
Neale Rannsb4743802018-09-05 09:13:57 -0700320/** \brief Flags that can be changed on a bridge domain */
321enum bd_flags
322{
323 BRIDGE_API_FLAG_LEARN = 0x1,
324 BRIDGE_API_FLAG_FWD = 0x2,
325 BRIDGE_API_FLAG_FLOOD = 0x4,
326 BRIDGE_API_FLAG_UU_FLOOD = 0x8,
327 BRIDGE_API_FLAG_ARP_TERM = 0x10,
328};
329
330/** \brief Set bridge flags request
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100331 @param client_index - opaque cookie to identify the sender
332 @param context - sender context, to match reply w/ request
333 @param bd_id - the bridge domain to set the flags for
334 @param is_set - if non-zero, set the flags, else clear them
Neale Rannsb4743802018-09-05 09:13:57 -0700335 @param flags - flags that are non-zero to set or clear
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100336*/
337define bridge_flags
338{
339 u32 client_index;
340 u32 context;
341 u32 bd_id;
342 u8 is_set;
Neale Rannsb4743802018-09-05 09:13:57 -0700343 vl_api_bd_flags_t flags;
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100344};
345
346/** \brief Set bridge flags response
347 @param context - sender context, to match reply w/ request
348 @param retval - return code for the set bridge flags request
John Lo8d00fff2017-08-03 00:35:36 -0400349 @param resulting_feature_bitmap - the internal L2 feature bitmap after the request is implemented
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100350*/
351define bridge_flags_reply
352{
353 u32 context;
354 i32 retval;
355 u32 resulting_feature_bitmap;
356};
357
Pavel Kotucekadec5872017-01-25 08:50:53 +0100358/** \brief L2 interface vlan tag rewrite configure request
359 @param client_index - opaque cookie to identify the sender
360 @param context - sender context, to match reply w/ request
361 @param sw_if_index - interface the operation is applied to
362 @param vtr_op - Choose from l2_vtr_op_t enum values
363 @param push_dot1q - first pushed flag dot1q id set, else dot1ad
364 @param tag1 - Needed for any push or translate vtr op
365 @param tag2 - Needed for any push 2 or translate x-2 vtr ops
366*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400367autoreply define l2_interface_vlan_tag_rewrite
Pavel Kotucekadec5872017-01-25 08:50:53 +0100368{
369 u32 client_index;
370 u32 context;
371 u32 sw_if_index;
372 u32 vtr_op;
373 u32 push_dot1q; // ethertype of first pushed tag is dot1q/dot1ad
374 u32 tag1; // first pushed tag
375 u32 tag2; // second pushed tag
376};
377
Pavel Kotucekadec5872017-01-25 08:50:53 +0100378/** \brief L2 interface pbb tag rewrite configure request
379 @param client_index - opaque cookie to identify the sender
380 @param context - sender context, to match reply w/ request
381 @param sw_if_index - interface the operation is applied to
382 @param vtr_op - Choose from l2_vtr_op_t enum values
383 @param inner_tag - needed for translate_qinq vtr op only
384 @param outer_tag - needed for translate_qinq vtr op only
385 @param b_dmac - B-tag remote mac address, needed for any push or translate_qinq vtr op
386 @param b_smac - B-tag local mac address, needed for any push or translate qinq vtr op
387 @param b_vlanid - B-tag vlanid, needed for any push or translate qinq vtr op
388 @param i_sid - I-tag service id, needed for any push or translate qinq vtr op
389*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400390autoreply define l2_interface_pbb_tag_rewrite
Pavel Kotucekadec5872017-01-25 08:50:53 +0100391{
392 u32 client_index;
393 u32 context;
394 u32 sw_if_index;
395 u32 vtr_op;
396 u16 outer_tag;
397 u8 b_dmac[6];
398 u8 b_smac[6];
399 u16 b_vlanid;
400 u32 i_sid;
401};
402
Neale Rannsb8d44812017-11-10 06:53:54 -0800403/** \brief L2 interface patch add / del request
404 @param client_index - opaque cookie to identify the sender
405 @param context - sender context, to match reply w/ request
406 @param rx_sw_if_index - receive side interface
407 @param tx_sw_if_index - transmit side interface
408 @param is_add - if non-zero set up the interface patch, else remove it
409*/
410autoreply define l2_patch_add_del
411{
412 u32 client_index;
413 u32 context;
414 u32 rx_sw_if_index;
415 u32 tx_sw_if_index;
416 u8 is_add;
417};
418
419/** \brief Set L2 XConnect between two interfaces request
420 @param client_index - opaque cookie to identify the sender
421 @param context - sender context, to match reply w/ request
422 @param rx_sw_if_index - Receive interface index
423 @param tx_sw_if_index - Transmit interface index
424 @param enable - enable xconnect if not 0, else set to L3 mode
425*/
426autoreply define sw_interface_set_l2_xconnect
427{
428 u32 client_index;
429 u32 context;
430 u32 rx_sw_if_index;
431 u32 tx_sw_if_index;
432 u8 enable;
433};
434
Neale Rannsb4743802018-09-05 09:13:57 -0700435/**
436 * @brief An enumeration of the type of ports that can be added
437 * to a bridge domain
438 */
439enum l2_port_type
440{
441 /* a 'normal' interface, i.e. not BVI or UU-Flood */
442 L2_API_PORT_TYPE_NORMAL = 0,
443 /* a BVI interface in the BD */
444 L2_API_PORT_TYPE_BVI = 1,
445 /* The interface on which to forward unknown unicast packets
446 * If this is not set for a BD then UU is flooded */
447 L2_API_PORT_TYPE_UU_FWD = 2,
448};
449
Neale Rannsb8d44812017-11-10 06:53:54 -0800450/** \brief Interface bridge mode request
451 @param client_index - opaque cookie to identify the sender
452 @param context - sender context, to match reply w/ request
453 @param rx_sw_if_index - the interface
454 @param bd_id - bridge domain id
Yichen Wang0a4e0062018-10-01 11:15:25 -0700455 @param port_type - port_mode, see #l2_port_type
Yichen Wang5c7c49d2018-09-18 17:32:29 -0700456 @param shg - Split horizon group, for bridge mode only
Neale Rannsb8d44812017-11-10 06:53:54 -0800457 @param enable - Enable beige mode if not 0, else set to L3 mode
458*/
Neale Rannsb4743802018-09-05 09:13:57 -0700459
Neale Rannsb8d44812017-11-10 06:53:54 -0800460autoreply define sw_interface_set_l2_bridge
461{
462 u32 client_index;
463 u32 context;
464 u32 rx_sw_if_index;
465 u32 bd_id;
Neale Rannsb4743802018-09-05 09:13:57 -0700466 vl_api_l2_port_type_t port_type;
Neale Rannsb8d44812017-11-10 06:53:54 -0800467 u8 shg;
Neale Rannsb8d44812017-11-10 06:53:54 -0800468 u8 enable;
469};
470
471/** \brief Set bridge domain ip to mac entry request
472 @param client_index - opaque cookie to identify the sender
473 @param context - sender context, to match reply w/ request
474 @param bd_id - the bridge domain to set the flags for
475 @param is_add - if non-zero, add the entry, else clear it
476 @param is_ipv6 - if non-zero, ipv6 address, else ipv4 address
477 @param mac_address - MAC address
478 @param
479*/
480autoreply define bd_ip_mac_add_del
481{
482 u32 client_index;
483 u32 context;
484 u32 bd_id;
485 u8 is_add;
Neale Ranns4d5b9172018-10-24 02:57:49 -0700486 vl_api_address_t ip;
487 vl_api_mac_address_t mac;
Neale Rannsb8d44812017-11-10 06:53:54 -0800488};
489
Mohsin Kazmi5d82d2f2018-08-13 19:17:54 +0200490/** \brief bridge domain IP to MAC entry details structure
491 @param bd_id - bridge domain table id
492 @param is_ipv6 - if non-zero, ipv6 address, else ipv4 address
493 @param ip_address - ipv4 or ipv6 address
494 @param mac_address - MAC address
495*/
496define bd_ip_mac_details
497{
498 u32 context;
499 u32 bd_id;
500 u8 is_ipv6;
501 u8 ip_address[16];
Ole Troan8006c6a2018-12-17 12:02:26 +0100502 vl_api_mac_address_t mac_address;
Mohsin Kazmi5d82d2f2018-08-13 19:17:54 +0200503};
504
505/** \brief Dump bridge domain IP to MAC entries
506 @param client_index - opaque cookie to identify the sender
507 @param bd_id - bridge domain identifier
508*/
509define bd_ip_mac_dump
510{
511 u32 client_index;
512 u32 context;
513 u32 bd_id;
514};
515
Neale Rannsb8d44812017-11-10 06:53:54 -0800516/** \brief L2 interface ethernet flow point filtering enable/disable request
517 @param client_index - opaque cookie to identify the sender
518 @param context - sender context, to match reply w/ request
519 @param sw_if_index - interface to enable/disable filtering on
520 @param enable_disable - if non-zero enable filtering, else disable
521*/
522autoreply define l2_interface_efp_filter
523{
524 u32 client_index;
525 u32 context;
526 u32 sw_if_index;
Neale Ranns6b9b41c2018-07-23 05:47:09 -0400527 u8 enable_disable;
Neale Rannsb8d44812017-11-10 06:53:54 -0800528};
529
530/** \brief Interface set vpath request
531 @param client_index - opaque cookie to identify the sender
532 @param context - sender context, to match reply w/ request
533 @param sw_if_index - interface used to reach neighbor
534 @param enable - if non-zero enable, else disable
535*/
536autoreply define sw_interface_set_vpath
537{
538 u32 client_index;
539 u32 context;
540 u32 sw_if_index;
541 u8 enable;
542};
543
Pavel Kotucek0f971d82017-01-03 10:48:54 +0100544/*
545 * Local Variables:
546 * eval: (c-set-style "gnu")
547 * End:
548 */