ROFL-pipeline  v0.6.0dev
packet_matches.c
1 #include "packet_matches.h"
2 
3 #include "rofl.h"
4 #include "endianness.h"
5 #include "protocol_constants.h"
6 #include "../platform/packet.h"
7 #include "../util/logging.h"
8 
9 //FIXME: unify packet matches alignment with MATCHEs and ACTIONs; there should be only one piece of code dealing with alignment
10 
11 /*
12 * DEBUG/INFO dumping routines
13 */
14 //Fill pkt matches structure
16  uint8_t* ptr8;
17  uint16_t* ptr16;
18  uint32_t* ptr32;
19  uint64_t* ptr64;
20  uint128__t* ptr128;
21  uint128__t zero_u128 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
22 
23  //Packet size
24  m->__pkt_size_bytes = platform_packet_get_size_bytes(pkt);
25 
26  //Ports
27  m->__port_in = ( (ptr32=platform_packet_get_port_in(pkt))==NULL ? 0 : *ptr32);
28  m->__phy_port_in = ( (ptr32=platform_packet_get_phy_port_in(pkt))==NULL ? 0 : *ptr32);
29 
30  //Associated metadata
31  m->__metadata = pkt->__metadata;
32 
33  //802
34  m->__eth_dst = ( (ptr64=platform_packet_get_eth_dst(pkt))==NULL ? 0 : *ptr64);
35  m->__eth_src = ( (ptr64=platform_packet_get_eth_src(pkt))==NULL ? 0 : *ptr64);
36  m->__eth_type = ( (ptr16=platform_packet_get_eth_type(pkt))==NULL ? 0 : *ptr16);
37 
38  //802.1q VLAN outermost tag
39  m->__has_vlan = platform_packet_has_vlan(pkt);
40  m->__vlan_vid = ( (ptr16=platform_packet_get_vlan_vid(pkt))==NULL ? 0 : *ptr16);
41  m->__vlan_pcp = ( (ptr8=platform_packet_get_vlan_pcp(pkt))==NULL ? 0 : *ptr8);
42 
43  //ARP
44  m->__arp_opcode = ( (ptr16=platform_packet_get_arp_opcode(pkt))==NULL ? 0 : *ptr16);
45  m->__arp_sha = ( (ptr64=platform_packet_get_arp_sha(pkt))==NULL ? 0 : *ptr64);
46  m->__arp_spa = ( (ptr32=platform_packet_get_arp_spa(pkt))==NULL ? 0 : *ptr32);
47  m->__arp_tha = ( (ptr64=platform_packet_get_arp_tha(pkt))==NULL ? 0 : *ptr64);
48  m->__arp_tpa = ( (ptr32=platform_packet_get_arp_tpa(pkt))==NULL ? 0 : *ptr32);
49 
50  //IP
51  m->__ip_proto = ( (ptr8=platform_packet_get_ip_proto(pkt))==NULL ? 0 : *ptr8);
52  m->__ip_dscp = platform_packet_get_ip_dscp(pkt);
53  m->__ip_ecn = platform_packet_get_ip_ecn(pkt);
54 
55  //IPv4
56  m->__ipv4_src = ( (ptr32=platform_packet_get_ipv4_src(pkt))==NULL ? 0 : *ptr32);
57  m->__ipv4_dst = ( (ptr32=platform_packet_get_ipv4_dst(pkt))==NULL ? 0 : *ptr32);
58 
59  //TCP
60  m->__tcp_src = ( (ptr16=platform_packet_get_tcp_src(pkt))==NULL ? 0 : *ptr16);
61  m->__tcp_dst = ( (ptr16=platform_packet_get_tcp_dst(pkt))==NULL ? 0 : *ptr16);
62 
63  //UDP
64  m->__udp_src = ( (ptr16=platform_packet_get_udp_src(pkt))==NULL ? 0 : *ptr16);
65  m->__udp_dst = ( (ptr16=platform_packet_get_udp_dst(pkt))==NULL ? 0 : *ptr16);
66 
67  //SCTP
68  m->__sctp_src = ( (ptr16=platform_packet_get_sctp_src(pkt))==NULL ? 0 : *ptr16);
69  m->__sctp_dst = ( (ptr16=platform_packet_get_sctp_dst(pkt))==NULL ? 0 : *ptr16);
70 
71 
72  //ICMPv4
73  m->__icmpv4_type = ( (ptr8=platform_packet_get_icmpv4_type(pkt))==NULL ? 0 : *ptr8);
74  m->__icmpv4_code = ( (ptr8=platform_packet_get_icmpv4_code(pkt))==NULL ? 0 : *ptr8);
75 
76  //MPLS-outermost label
77  m->__mpls_label = ( (ptr32=platform_packet_get_mpls_label(pkt))==NULL ? 0 : *ptr32);
78  m->__mpls_tc = ( (ptr8=platform_packet_get_mpls_tc(pkt))==NULL ? 0 : *ptr8);
79  m->__mpls_bos = platform_packet_get_mpls_bos(pkt);
80 
81 
82  //IPv6
83  m->__ipv6_src = ( (ptr128=platform_packet_get_ipv6_src(pkt))==NULL ? zero_u128 : *ptr128);
84  m->__ipv6_dst = ( (ptr128=platform_packet_get_ipv6_dst(pkt))==NULL ? zero_u128 : *ptr128);
85  m->__ipv6_flabel = ( (ptr32=platform_packet_get_ipv6_flabel(pkt))==NULL ? 0 : *ptr32);
86  m->__ipv6_nd_target = ( (ptr128=platform_packet_get_ipv6_nd_target(pkt))==NULL ? zero_u128 : *ptr128);
87  m->__ipv6_nd_sll = ( (ptr64=platform_packet_get_ipv6_nd_sll(pkt))==NULL ? 0 : *ptr64);
88  m->__ipv6_nd_tll = ( (ptr64=platform_packet_get_ipv6_nd_tll(pkt))==NULL ? 0 : *ptr64);
89  m->__ipv6_exthdr = ( (ptr16=platform_packet_get_ipv6_exthdr(pkt))==NULL ? 0 : *ptr16);
90 
91  //ICMPv6
92  m->__icmpv6_code = ( (ptr8=platform_packet_get_icmpv6_code(pkt))==NULL ? 0 : *ptr8);
93  m->__icmpv6_type = ( (ptr8=platform_packet_get_icmpv6_type(pkt))==NULL ? 0 : *ptr8);
94 
95  //PBB
96  m->__pbb_isid = ( (ptr32=platform_packet_get_pbb_isid(pkt))==NULL ? 0 : *ptr32);
97 
98  //Tunnel id
99  m->__tunnel_id = ( (ptr64=platform_packet_get_tunnel_id(pkt))==NULL ? 0 : *ptr64);
100 
101 #ifdef ROFL_EXPERIMENTAL
102  /*
103  * Extensions
104  */
105 
106  //PPPoE related extensions
107  m->__pppoe_code = ( (ptr8=platform_packet_get_pppoe_code(pkt))==NULL ? 0 : *ptr8);
108  m->__pppoe_type = ( (ptr8=platform_packet_get_pppoe_type(pkt))==NULL ? 0 : *ptr8);
109  m->__pppoe_sid = ( (ptr16=platform_packet_get_pppoe_sid(pkt))==NULL ? 0 : *ptr16);
110 
111  //PPP related extensions
112  m->__ppp_proto = ( (ptr16=platform_packet_get_ppp_proto(pkt))==NULL ? 0 : *ptr16);
113 
114  //GTP related extensions
115  m->__gtp_msg_type = ( (ptr8=platform_packet_get_gtp_msg_type(pkt))==NULL ? 0 : *ptr8);
116  m->__gtp_teid = ( (ptr32=platform_packet_get_gtp_teid(pkt))==NULL ? 0 : *ptr32);
117 
118  //CAPWAP related extensions
119  m->__capwap_wbid = ( (ptr8=platform_packet_get_capwap_wbid(pkt))==NULL ? 0 : *ptr8);
120  m->__capwap_rid = ( (ptr8=platform_packet_get_capwap_rid(pkt))==NULL ? 0 : *ptr8);
121  m->__capwap_flags = ( (ptr16=platform_packet_get_capwap_flags(pkt))==NULL ? 0 : *ptr16);
122 
123  //WLAN related extensions
124  m->__wlan_fc = ( (ptr16=platform_packet_get_wlan_fc(pkt))==NULL ? 0 : *ptr16);
125  m->__wlan_type = ( (ptr8=platform_packet_get_wlan_type(pkt))==NULL ? 0 : *ptr8);
126  m->__wlan_subtype = ( (ptr8=platform_packet_get_wlan_subtype(pkt))==NULL ? 0 : *ptr8);
127  m->__wlan_direction = ( (ptr8=platform_packet_get_wlan_direction(pkt))==NULL ? 0 : *ptr8);
128  m->__wlan_address_1 = ( (ptr64=platform_packet_get_wlan_address_1(pkt))==NULL ? 0 : *ptr64);
129  m->__wlan_address_2 = ( (ptr64=platform_packet_get_wlan_address_2(pkt))==NULL ? 0 : *ptr64);
130  m->__wlan_address_3 = ( (ptr64=platform_packet_get_wlan_address_3(pkt))==NULL ? 0 : *ptr64);
131 
132  //GRE related extensions
133  m->__gre_version = ( (ptr16=platform_packet_get_gre_version(pkt))==NULL ? 0 : *ptr16);
134  m->__gre_prot_type = ( (ptr16=platform_packet_get_gre_prot_type(pkt))==NULL ? 0 : *ptr16);
135  m->__gre_key = ( (ptr32=platform_packet_get_gre_key(pkt))==NULL ? 0 : *ptr32);
136 #endif
137 }
138 
139 
140 //Dump packet matches
141 void dump_packet_matches(datapacket_t *const pkt, bool raw_nbo){
142 
143  packet_matches_t matches;
144  packet_matches_t* m = &matches;
145 
146  //Prefill packet matches
147  fill_packet_matches(pkt, m);
148 
149  ROFL_PIPELINE_INFO("Packet[%p] {", pkt);
150 
151  //Ports
152  if(m->__port_in)
153  ROFL_PIPELINE_INFO_NO_PREFIX("PORT_IN:%u, ",m->__port_in);
154  if(m->__phy_port_in)
155  ROFL_PIPELINE_INFO_NO_PREFIX("PHY_PORT_IN:%u, ",m->__phy_port_in);
156 
157  //Metadata
158  if(m->__metadata)
159  ROFL_PIPELINE_INFO_NO_PREFIX("METADATA: 0x%" PRIx64 ", ",m->__metadata);
160 
161  //802
162  if(m->__eth_src){
163  uint64_t tmp = m->__eth_src;
164  if(!raw_nbo)
165  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
166  ROFL_PIPELINE_INFO_NO_PREFIX("ETH_SRC:0x%"PRIx64", ", tmp);
167  }
168  if(m->__eth_dst){
169  uint64_t tmp = m->__eth_dst;
170  if(!raw_nbo)
171  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
172  ROFL_PIPELINE_INFO_NO_PREFIX("ETH_DST:0x%"PRIx64", ", tmp);
173  }
174  if(m->__eth_type)
175  ROFL_PIPELINE_INFO_NO_PREFIX("ETH_TYPE:0x%x, ", COND_NTOHB16(raw_nbo,m->__eth_type));
176 
177  //802.1q
178  if(m->__has_vlan)
179  ROFL_PIPELINE_INFO_NO_PREFIX("VLAN_VID:%u, ", COND_NTOHB16(raw_nbo,m->__vlan_vid));
180  if(m->__has_vlan){
181  uint8_t tmp = m->__vlan_pcp;
182  if(!raw_nbo)
183  tmp = OF1X_VLAN_PCP_VALUE(tmp);
184  ROFL_PIPELINE_INFO_NO_PREFIX("VLAN_PCP:%u, ", tmp);
185  }
186  //ARP
187  if(m->__eth_type == ETH_TYPE_ARP)
188  ROFL_PIPELINE_INFO_NO_PREFIX("ARP_OPCODE:0x%x, ", COND_NTOHB16(raw_nbo,m->__arp_opcode));
189  if(m->__eth_type == ETH_TYPE_ARP){
190  uint64_t tmp = m->__arp_sha;
191  if(!raw_nbo)
192  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
193  ROFL_PIPELINE_INFO_NO_PREFIX("ARP_SHA:0x%"PRIx64", ", tmp);
194  }
195  if(m->__eth_type == ETH_TYPE_ARP)
196  ROFL_PIPELINE_INFO_NO_PREFIX("ARP_SPA:0x%x, ", COND_NTOHB32(raw_nbo,m->__arp_spa));
197  if(m->__eth_type == ETH_TYPE_ARP){
198  uint64_t tmp = m->__arp_tha;
199  if(!raw_nbo)
200  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
201  ROFL_PIPELINE_INFO_NO_PREFIX("ARP_THA:0x%"PRIx64", ", tmp);
202  }
203  if(m->__eth_type == ETH_TYPE_ARP)
204  ROFL_PIPELINE_INFO_NO_PREFIX("ARP_TPA:0x%x, ", COND_NTOHB32(raw_nbo,m->__arp_tpa));
205  //IP/IPv4
206  if((m->__eth_type == ETH_TYPE_IPV4 || m->__eth_type == ETH_TYPE_IPV6) && m->__ip_proto)
207  ROFL_PIPELINE_INFO_NO_PREFIX("IP_PROTO:%u, ",m->__ip_proto);
208 
209  if((m->__eth_type == ETH_TYPE_IPV4 || m->__eth_type == ETH_TYPE_IPV6) && m->__ip_ecn)
210  ROFL_PIPELINE_INFO_NO_PREFIX("IP_ECN:0x%x, ",m->__ip_ecn);
211 
212  if((m->__eth_type == ETH_TYPE_IPV4 || m->__eth_type == ETH_TYPE_IPV6) && m->__ip_dscp){
213  uint8_t tmp = m->__ip_dscp;
214  if(!raw_nbo)
215  tmp = OF1X_IP_DSCP_VALUE(tmp);
216 
217  ROFL_PIPELINE_INFO_NO_PREFIX("IP_DSCP:0x%x, ", tmp);
218  }
219 
220  if(m->__ipv4_src)
221  ROFL_PIPELINE_INFO_NO_PREFIX("IPV4_SRC:0x%x, ", COND_NTOHB32(raw_nbo,m->__ipv4_src));
222  if(m->__ipv4_dst)
223  ROFL_PIPELINE_INFO_NO_PREFIX("IPV4_DST:0x%x, ", COND_NTOHB32(raw_nbo,m->__ipv4_dst));
224  //TCP
225  if(m->__tcp_src)
226  ROFL_PIPELINE_INFO_NO_PREFIX("TCP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__tcp_src));
227  if(m->__tcp_dst)
228  ROFL_PIPELINE_INFO_NO_PREFIX("TCP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__tcp_dst));
229  //UDP
230  if(m->__udp_src)
231  ROFL_PIPELINE_INFO_NO_PREFIX("UDP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__udp_src));
232  if(m->__udp_dst)
233  ROFL_PIPELINE_INFO_NO_PREFIX("UDP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__udp_dst));
234 
235  //SCTP
236  if(m->__sctp_src)
237  ROFL_PIPELINE_INFO_NO_PREFIX("SCTP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__sctp_src));
238  if(m->__sctp_dst)
239  ROFL_PIPELINE_INFO_NO_PREFIX("SCTP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__sctp_dst));
240 
241  //ICMPV4
242  if(m->__ip_proto == IP_PROTO_ICMPV4)
243  ROFL_PIPELINE_INFO_NO_PREFIX("ICMPV4_TYPE:%u, ICMPV4_CODE:%u, ",m->__icmpv4_type,m->__icmpv4_code);
244 
245  //IPv6
246  if( UINT128__T_LO(m->__ipv6_src) || UINT128__T_HI(m->__ipv6_src) ){
247  uint128__t tmp = m->__ipv6_src;
248  (void)tmp;
249  if(!raw_nbo)
250  NTOHB128(tmp);
251  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_SRC:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
252  }
253  if( UINT128__T_LO(m->__ipv6_dst) || UINT128__T_HI(m->__ipv6_dst) ){
254  uint128__t tmp = m->__ipv6_dst;
255  (void)tmp;
256  if(!raw_nbo)
257  NTOHB128(tmp);
258  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_DST:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
259  }
260  if(m->__eth_type == ETH_TYPE_IPV6){
261  uint32_t tmp = m->__ipv6_flabel;
262  if(!raw_nbo)
263  tmp = OF1X_IP6_FLABEL_VALUE(NTOHB32(tmp));
264  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_FLABEL:0x%lu, ", tmp);
265  }
266  if(m->__ip_proto == IP_PROTO_ICMPV6){
267  uint128__t tmp = m->__ipv6_nd_target;
268  (void)tmp;
269  if(!raw_nbo)
270  NTOHB128(tmp);
271  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_ND_TARGET:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
272  }
273  if(m->__ip_proto == IP_PROTO_ICMPV6){
274  //NOTE && m->__icmpv6_type ==?
275  uint64_t tmp = m->__ipv6_nd_sll;
276  if(!raw_nbo)
277  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
278 
279  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_ND_SLL:0x%"PRIx64", ", tmp);
280  }
281  if(m->__ip_proto == IP_PROTO_ICMPV6){
282  //NOTE && m->__icmpv6_type ==?
283  uint64_t tmp = m->__ipv6_nd_tll;
284  if(!raw_nbo)
285  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
286  ROFL_PIPELINE_INFO_NO_PREFIX("IPV6_ND_TLL:0x%"PRIx64", ", tmp);
287  }
288  /*TODO IPV6 exthdr*/
289  /*nd_target nd_sll nd_tll exthdr*/
290 
291  //ICMPv6
292  if(m->__ip_proto == IP_PROTO_ICMPV6)
293  ROFL_PIPELINE_INFO_NO_PREFIX("ICMPV6_TYPE:%lu, ICMPV6_CODE:%lu, ",m->__icmpv6_type,m->__icmpv6_code);
294 
295  //MPLS
296  if(m->__eth_type == ETH_TYPE_MPLS_UNICAST || m->__eth_type == ETH_TYPE_MPLS_MULTICAST ){
297  uint8_t tmp_tc = m->__mpls_tc;
298  uint32_t tmp_label = m->__mpls_label;
299  if(!raw_nbo){
300  tmp_tc = OF1X_MPLS_TC_VALUE(tmp_tc);
301  tmp_label = OF1X_MPLS_LABEL_VALUE(NTOHB32(tmp_label));
302  }
303  ROFL_PIPELINE_INFO_NO_PREFIX("MPLS_LABEL:0x%x, MPLS_TC:0x%x, MPLS_BOS:%u", tmp_label, tmp_tc, m->__mpls_bos);
304  }
305 
306  //PBB
307  if(m->__pbb_isid)
308  ROFL_PIPELINE_INFO_NO_PREFIX("PBB_ISID:%u,", COND_NTOHB32(raw_nbo,m->__pbb_isid));
309  //Tunnel id
310  if(m->__tunnel_id)
311  ROFL_PIPELINE_INFO_NO_PREFIX("TUNNEL ID:0x%"PRIx64", ", COND_NTOHB64(raw_nbo,m->__tunnel_id));
312 
313 #ifdef ROFL_EXPERIMENTAL
314  //PPPoE
315  if(m->__eth_type == ETH_TYPE_PPPOE_DISCOVERY || m->__eth_type == ETH_TYPE_PPPOE_SESSION ){
316  ROFL_PIPELINE_INFO_NO_PREFIX("PPPOE_CODE:0x%x, PPPOE_TYPE:0x%x, PPPOE_SID:0x%x, ",m->__pppoe_code, m->__pppoe_type,COND_NTOHB16(raw_nbo, m->__pppoe_sid));
317  //PPP
318  if(m->__eth_type == ETH_TYPE_PPPOE_SESSION)
319  ROFL_PIPELINE_INFO_NO_PREFIX("PPP_PROTO:0x%x, ",m->__ppp_proto);
320 
321  }
322 
323  //GTP
324  if(m->__ip_proto == IP_PROTO_UDP && m->__udp_dst == UDP_DST_PORT_GTPU){
325  ROFL_PIPELINE_INFO_NO_PREFIX("GTP_MSG_TYPE:%u, GTP_TEID:0x%x, ",m->__gtp_msg_type, COND_NTOHB32(raw_nbo, m->__gtp_teid));
326  }
327 
328  //CAPWAP
329  if((m->__ip_proto == IP_PROTO_UDP) && ((m->__udp_dst == UDP_DST_PORT_CAPWAPC) || (m->__udp_dst == UDP_DST_PORT_CAPWAPU))) {
330  ROFL_PIPELINE_INFO_NO_PREFIX("CAPWAP_WBID:%u, CAPWAP_RID:%u, CAPWAP_FLAGS:0x%x, ", m->__capwap_wbid, m->__capwap_rid, COND_NTOHB16(raw_nbo, m->__capwap_flags));
331  }
332 
333  //WLAN
334  if(m->__wlan_fc)
335  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_FC:0x%x,", COND_NTOHB16(raw_nbo, m->__wlan_fc));
336  if(m->__wlan_type)
337  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_TYPE:%u,", m->__wlan_type);
338  if(m->__wlan_subtype)
339  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_SUBTYPE:%u,", m->__wlan_type);
340  if(m->__wlan_direction)
341  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_DIRECTION:%u,", m->__wlan_direction);
342  if(m->__wlan_address_1){
343  uint64_t tmp = m->__wlan_address_1;
344  if(!raw_nbo)
345  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
346  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_ADDRESS_1:0x%"PRIx64", ", tmp);
347  }
348  if(m->__wlan_address_2){
349  uint64_t tmp = m->__wlan_address_2;
350  if(!raw_nbo)
351  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
352  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_ADDRESS_2:0x%"PRIx64", ", tmp);
353  }
354  if(m->__wlan_address_3){
355  uint64_t tmp = m->__wlan_address_3;
356  if(!raw_nbo)
357  tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
358  ROFL_PIPELINE_INFO_NO_PREFIX("WLAN_ADDRESS_3:0x%"PRIx64", ", tmp);
359  }
360 
361  //GTP
362  if(m->__ip_proto == IP_PROTO_GRE){
363  ROFL_PIPELINE_INFO_NO_PREFIX("GRE_VERSION:0x%x, GRE_PROT_TYPE:0x%x, GRE_KEY:0x%x, ",COND_NTOHB16(raw_nbo, m->__gre_version), COND_NTOHB16(raw_nbo, m->__gre_prot_type), COND_NTOHB32(raw_nbo, m->__gre_key));
364  }
365 #endif
366 
367  ROFL_PIPELINE_INFO_NO_PREFIX("}\n");
368 
369  //Add more here...
370 }
371 
uint32_t * platform_packet_get_arp_tpa(datapacket_t *const pkt)
Get the ARP TPA value of the packet.
uint64_t * platform_packet_get_arp_tha(datapacket_t *const pkt)
Get the ARP THA value of the packet.
uint32_t * platform_packet_get_mpls_label(datapacket_t *const pkt)
Retrieves the outer-most MPLS tag label.
uint32_t * platform_packet_get_phy_port_in(datapacket_t *const pkt)
Retrieves the PHY port in identifier where the packet got in.
uint16_t * platform_packet_get_sctp_dst(datapacket_t *const pkt)
Get the SCTP dst port.
uint8_t * platform_packet_get_vlan_pcp(datapacket_t *const pkt)
Retrieves the VLAN PCP of the outer-most 802.1q VLAN tag.
uint16_t * platform_packet_get_ipv6_exthdr(datapacket_t *const pkt)
Get the IPv6 exthdr of the packet.
uint16_t * platform_packet_get_sctp_src(datapacket_t *const pkt)
Get the SCTP src port.
uint8_t platform_packet_get_ip_dscp(datapacket_t *const pkt)
Get the ip DSCP value of the packet.
uint16_t * platform_packet_get_arp_opcode(datapacket_t *const pkt)
Get the ARP OPCODE value of the packet.
ROFL_BEGIN_DECLS uint32_t platform_packet_get_size_bytes(datapacket_t *const pkt)
Gets the complete packet size in bytes.
bool platform_packet_has_vlan(datapacket_t *const pkt)
Retrieves boolean if the packet contains a 802.1q VLAN tag.
uint32_t * platform_packet_get_arp_spa(datapacket_t *const pkt)
Get the ARP SPA value of the packet.
uint128__t * platform_packet_get_ipv6_nd_target(datapacket_t *const pkt)
Get the IPv6 nd target of the packet.
uint64_t * platform_packet_get_arp_sha(datapacket_t *const pkt)
Get the ARP SHA value of the packet.
uint16_t * platform_packet_get_tcp_dst(datapacket_t *const pkt)
Get the TCP dst port.
uint128__t * platform_packet_get_ipv6_dst(datapacket_t *const pkt)
Get the IPv6 dst address of the packet.
uint16_t * platform_packet_get_eth_type(datapacket_t *const pkt)
Retrieve the Ethernet ETH_TYPE of the packet.
Utils to dump the "packet header values".
uint64_t * platform_packet_get_eth_src(datapacket_t *const pkt)
Retrieve the Ethernet src MAC address of the packet.
uint64_t * platform_packet_get_ipv6_nd_sll(datapacket_t *const pkt)
Get the IPv6 nd sll of the packet.
uint8_t * platform_packet_get_ip_proto(datapacket_t *const pkt)
Get the ip proto value of the packet.
uint8_t * platform_packet_get_icmpv4_type(datapacket_t *const pkt)
Get the ICMPv4 type.
uint16_t * platform_packet_get_tcp_src(datapacket_t *const pkt)
Get the TCP src port.
bool platform_packet_get_mpls_bos(datapacket_t *const pkt)
Retrieves the outer-most MPLS tag BoS flag.
uint32_t * platform_packet_get_pbb_isid(datapacket_t *const pkt)
Get PBB I-SID value of the packet.
uint8_t platform_packet_get_ip_ecn(datapacket_t *const pkt)
Get the ip ECN value of the packet.
uint32_t * platform_packet_get_ipv4_dst(datapacket_t *const pkt)
Get the IPv4 dst address of the packet.
void fill_packet_matches(datapacket_t *const pkt, packet_matches_t *m)
Fill in packet_matches (for PKT_INs)
uint64_t * platform_packet_get_tunnel_id(datapacket_t *const pkt)
Get Tunnel ID.
uint16_t * platform_packet_get_udp_src(datapacket_t *const pkt)
Get the UDP src port.
uint32_t * platform_packet_get_port_in(datapacket_t *const pkt)
Retrieves the port in identifier (position in the of1x_switch_t->logical_ports array) where the packe...
uint8_t * platform_packet_get_icmpv4_code(datapacket_t *const pkt)
Get the ICMPv4 code.
uint8_t * platform_packet_get_mpls_tc(datapacket_t *const pkt)
Retrieves the outer-most MPLS tag tc flag.
uint8_t * platform_packet_get_icmpv6_code(datapacket_t *const pkt)
Get the ICMPv6 code.
uint16_t * platform_packet_get_udp_dst(datapacket_t *const pkt)
Get the UDP dst port.
uint8_t * platform_packet_get_icmpv6_type(datapacket_t *const pkt)
Get the ICMPv6 type.
void dump_packet_matches(datapacket_t *const pkt, bool raw_nbo)
Dump the values of packet (header values)
uint64_t * platform_packet_get_eth_dst(datapacket_t *const pkt)
Retrieve the Ethernet dst MAC address of the packet.
Data packet abstraction.
Definition: datapacket.h:49
uint64_t * platform_packet_get_ipv6_nd_tll(datapacket_t *const pkt)
Get the IPv6 nd tll of the packet.
uint16_t * platform_packet_get_vlan_vid(datapacket_t *const pkt)
Retrieves the VLAN id of the outer-most 802.1q VLAN tag.
uint32_t * platform_packet_get_ipv4_src(datapacket_t *const pkt)
Get the IPv4 src address of the packet.
uint128__t * platform_packet_get_ipv6_src(datapacket_t *const pkt)
Get the IPv6 src address of the packet.
uint32_t * platform_packet_get_ipv6_flabel(datapacket_t *const pkt)
Get the IPv6 label of the packet.