FD.io VPP  v18.04-17-g3a0d853
Vector Packet Processing
protocol.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __included_lacp_protocol_h__
17 #define __included_lacp_protocol_h__
18 
19 #include <vnet/ethernet/ethernet.h>
20 #include <vnet/bonding/node.h>
21 
22 #define LACP_CHURN_DETECTION_TIME 60
23 #define LACP_AGGREGATE_WAIT_TIME 2.0
24 
25 #define LACP_SUBTYPE 1
26 #define LACP_ACTOR_LACP_VERSION 1
27 
28 #define foreach_lacp_tlv \
29  _ (TERMINATOR_INFORMATION, 0) \
30  _ (ACTOR_INFORMATION, 1) \
31  _ (PARTNER_INFORMATION , 2) \
32  _ (COLLECTOR_INFORMATION, 3)
33 
34 typedef enum
35 {
36 #define _(f,n) LACP_##f = (n),
38 #undef _
39 } lacp_tlv_t;
40 
41 #define foreach_lacp_port \
42  _ (UNSELECTED, 0) \
43  _ (SELECTED, 1) \
44  _ (STANDBY, 2)
45 
46 typedef enum
47 {
48 #define _(f,n) LACP_PORT_##f = (n),
50 #undef _
51 } lacp_port_t;
52 
53 /* Port state */
54 #define foreach_lacp_state \
55  _(0, LACP_ACTIVITY, "activity") \
56  _(1, LACP_TIMEOUT, "lacp timeout") \
57  _(2, AGGREGATION, "aggregation") \
58  _(3, SYNCHRONIZATION, "synchronization") \
59  _(4, COLLECTING, "collecting") \
60  _(5, DISTRIBUTING, "distributing") \
61  _(6, DEFAULTED, "defaulted") \
62  _(7, EXPIRED, "expired")
63 
64 typedef enum
65 {
66 #define _(a, b, c) LACP_STATE_##b = (1 << a),
68 #undef _
69 } lacp_state_t;
70 
71 #define foreach_lacp_state_flag \
72  _(0, LACP_STATE_LACP_ACTIVITY, "activity") \
73  _(1, LACP_STATE_LACP_TIMEOUT, "lacp timeout") \
74  _(2, LACP_STATE_AGGREGATION, "aggregation") \
75  _(3, LACP_STATE_SYNCHRONIZATION, "synchronization") \
76  _(4, LACP_STATE_COLLECTIING, "collecting") \
77  _(5, LACP_STATE_DISTRIBUTING, "distributing") \
78  _(6, LACP_STATE_DEFAULTED, "defaulted") \
79  _(7, LACP_STATE_EXPIRED, "expired")
80 
81 typedef struct
82 {
84  char *str;
86 
87 typedef struct
88 {
90  char *str;
92 
93 #define LACP_MAX_TX_IN_SECOND 3
94 #define LACP_DEFAULT_PORT_PRIORITY 0x00ff
95 #define LACP_DEFAULT_SYSTEM_PRIORITY 0xffff
96 
97 typedef CLIB_PACKED (struct
98  {
99  u8 tlv_type;
100  u8 tlv_length;
101  lacp_port_info_t port_info; u8 reserved[3];
102  }) lacp_actor_partner_t;
103 
104 typedef CLIB_PACKED (struct
105  {
106  u8 tlv_type; u8 tlv_length; u16 max_delay;
107  u8 reserved[12];
108  }) lacp_collector_t;
109 
110 typedef CLIB_PACKED (struct
111  {
112  u8 tlv_type; u8 tlv_length;
113  u8 pad[50];
114  }) lacp_terminator_t;
115 
116 typedef CLIB_PACKED (struct
117  {
118  u8 subtype; u8 version_number;
119  lacp_actor_partner_t actor; lacp_actor_partner_t partner;
120  lacp_collector_t collector; lacp_terminator_t terminator;
121  }) lacp_pdu_t;
122 
123 typedef CLIB_PACKED (struct
124  {
125  ethernet_header_t ethernet; lacp_pdu_t lacp;
126  }) ethernet_lacp_pdu_t;
127 
128 #define MARKER_SUBTYPE 2
129 #define MARKER_PROTOCOL_VERSION 1
130 
131 #define foreach_marker_tlv \
132  _ (TERMINATOR_INFORMATION, 0) \
133  _ (INFORMATION, 1) \
134  _ (RESPONSE_INFORMATION , 2)
135 
136 typedef enum
137 {
138 #define _(f,n) MARKER_##f = (n),
140 #undef _
141 } marker_tlv_t;
142 
143 typedef CLIB_PACKED (struct
144  {
145  u8 tlv_type; u8 tlv_length;
146  u8 reserved[90];
147  }) marker_terminator_t;
148 
149 typedef CLIB_PACKED (struct
150  {
151  u8 tlv_type;
152  u8 tlv_length;
153  u16 requester_port; u8 requester_system[6];
154  u32 requester_transaction_id; u8 pad[2];
155  }) marker_information_t;
156 
157 typedef CLIB_PACKED (struct
158  {
159  u8 subtype;
160  u8 version_number;
161  marker_information_t marker_info;
162  marker_terminator_t terminator;
163  }) marker_pdu_t;
164 
165 typedef CLIB_PACKED (struct
166  {
167  ethernet_header_t ethernet; marker_pdu_t marker;
168  }) ethernet_marker_pdu_t;
169 
170 #endif /* __included_lacp_protocol_h__ */
171 
172 /*
173  * fd.io coding-style-patch-verification: ON
174  *
175  * Local Variables:
176  * eval: (c-set-style "gnu")
177  * End:
178  */
marker_tlv_t
Definition: protocol.h:136
u8 pad[3]
log2 (size of the packing page block)
Definition: bihash_doc.h:61
typedef CLIB_PACKED(struct{u8 tlv_type;u8 tlv_length;lacp_port_info_t port_info;u8 reserved[3];}) lacp_actor_partner_t
#define foreach_lacp_state
Definition: protocol.h:54
#define foreach_marker_tlv
Definition: protocol.h:131
lacp_state_t
Definition: protocol.h:64
lacp_port_t
Definition: protocol.h:46
#define foreach_lacp_port
Definition: protocol.h:41
#define foreach_lacp_tlv
Definition: protocol.h:28
unsigned int u32
Definition: types.h:88
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
lacp_tlv_t
Definition: protocol.h:34