4 #include "endianness.h"
5 #include "protocol_constants.h"
6 #include "../platform/packet.h"
7 #include "../util/logging.h"
21 uint128__t zero_u128 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
31 m->__metadata = pkt->__metadata;
101 #ifdef ROFL_EXPERIMENTAL
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);
112 m->__ppp_proto = ( (ptr16=platform_packet_get_ppp_proto(pkt))==NULL ? 0 : *ptr16);
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);
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);
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);
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);
149 ROFL_PIPELINE_INFO(
"Packet[%p] {", pkt);
153 ROFL_PIPELINE_INFO_NO_PREFIX(
"PORT_IN:%u, ",m->__port_in);
155 ROFL_PIPELINE_INFO_NO_PREFIX(
"PHY_PORT_IN:%u, ",m->__phy_port_in);
159 ROFL_PIPELINE_INFO_NO_PREFIX(
"METADATA: 0x%" PRIx64
", ",m->__metadata);
163 uint64_t tmp = m->__eth_src;
165 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
166 ROFL_PIPELINE_INFO_NO_PREFIX(
"ETH_SRC:0x%"PRIx64
", ", tmp);
169 uint64_t tmp = m->__eth_dst;
171 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
172 ROFL_PIPELINE_INFO_NO_PREFIX(
"ETH_DST:0x%"PRIx64
", ", tmp);
175 ROFL_PIPELINE_INFO_NO_PREFIX(
"ETH_TYPE:0x%x, ", COND_NTOHB16(raw_nbo,m->__eth_type));
179 ROFL_PIPELINE_INFO_NO_PREFIX(
"VLAN_VID:%u, ", COND_NTOHB16(raw_nbo,m->__vlan_vid));
181 uint8_t tmp = m->__vlan_pcp;
183 tmp = OF1X_VLAN_PCP_VALUE(tmp);
184 ROFL_PIPELINE_INFO_NO_PREFIX(
"VLAN_PCP:%u, ", tmp);
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;
192 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
193 ROFL_PIPELINE_INFO_NO_PREFIX(
"ARP_SHA:0x%"PRIx64
", ", tmp);
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;
200 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
201 ROFL_PIPELINE_INFO_NO_PREFIX(
"ARP_THA:0x%"PRIx64
", ", tmp);
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));
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);
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);
212 if((m->__eth_type == ETH_TYPE_IPV4 || m->__eth_type == ETH_TYPE_IPV6) && m->__ip_dscp){
213 uint8_t tmp = m->__ip_dscp;
215 tmp = OF1X_IP_DSCP_VALUE(tmp);
217 ROFL_PIPELINE_INFO_NO_PREFIX(
"IP_DSCP:0x%x, ", tmp);
221 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV4_SRC:0x%x, ", COND_NTOHB32(raw_nbo,m->__ipv4_src));
223 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV4_DST:0x%x, ", COND_NTOHB32(raw_nbo,m->__ipv4_dst));
226 ROFL_PIPELINE_INFO_NO_PREFIX(
"TCP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__tcp_src));
228 ROFL_PIPELINE_INFO_NO_PREFIX(
"TCP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__tcp_dst));
231 ROFL_PIPELINE_INFO_NO_PREFIX(
"UDP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__udp_src));
233 ROFL_PIPELINE_INFO_NO_PREFIX(
"UDP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__udp_dst));
237 ROFL_PIPELINE_INFO_NO_PREFIX(
"SCTP_SRC:%u, ", COND_NTOHB16(raw_nbo,m->__sctp_src));
239 ROFL_PIPELINE_INFO_NO_PREFIX(
"SCTP_DST:%u, ", COND_NTOHB16(raw_nbo,m->__sctp_dst));
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);
246 if( UINT128__T_LO(m->__ipv6_src) || UINT128__T_HI(m->__ipv6_src) ){
251 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_SRC:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
253 if( UINT128__T_LO(m->__ipv6_dst) || UINT128__T_HI(m->__ipv6_dst) ){
258 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_DST:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
260 if(m->__eth_type == ETH_TYPE_IPV6){
261 uint32_t tmp = m->__ipv6_flabel;
263 tmp = OF1X_IP6_FLABEL_VALUE(NTOHB32(tmp));
264 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_FLABEL:0x%lu, ", tmp);
266 if(m->__ip_proto == IP_PROTO_ICMPV6){
271 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_ND_TARGET:0x%lx:%lx, ",UINT128__T_HI(tmp),UINT128__T_LO(tmp));
273 if(m->__ip_proto == IP_PROTO_ICMPV6){
275 uint64_t tmp = m->__ipv6_nd_sll;
277 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
279 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_ND_SLL:0x%"PRIx64
", ", tmp);
281 if(m->__ip_proto == IP_PROTO_ICMPV6){
283 uint64_t tmp = m->__ipv6_nd_tll;
285 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
286 ROFL_PIPELINE_INFO_NO_PREFIX(
"IPV6_ND_TLL:0x%"PRIx64
", ", tmp);
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);
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;
300 tmp_tc = OF1X_MPLS_TC_VALUE(tmp_tc);
301 tmp_label = OF1X_MPLS_LABEL_VALUE(NTOHB32(tmp_label));
303 ROFL_PIPELINE_INFO_NO_PREFIX(
"MPLS_LABEL:0x%x, MPLS_TC:0x%x, MPLS_BOS:%u", tmp_label, tmp_tc, m->__mpls_bos);
308 ROFL_PIPELINE_INFO_NO_PREFIX(
"PBB_ISID:%u,", COND_NTOHB32(raw_nbo,m->__pbb_isid));
311 ROFL_PIPELINE_INFO_NO_PREFIX(
"TUNNEL ID:0x%"PRIx64
", ", COND_NTOHB64(raw_nbo,m->__tunnel_id));
313 #ifdef ROFL_EXPERIMENTAL
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));
318 if(m->__eth_type == ETH_TYPE_PPPOE_SESSION)
319 ROFL_PIPELINE_INFO_NO_PREFIX(
"PPP_PROTO:0x%x, ",m->__ppp_proto);
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));
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));
335 ROFL_PIPELINE_INFO_NO_PREFIX(
"WLAN_FC:0x%x,", COND_NTOHB16(raw_nbo, m->__wlan_fc));
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;
345 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
346 ROFL_PIPELINE_INFO_NO_PREFIX(
"WLAN_ADDRESS_1:0x%"PRIx64
", ", tmp);
348 if(m->__wlan_address_2){
349 uint64_t tmp = m->__wlan_address_2;
351 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
352 ROFL_PIPELINE_INFO_NO_PREFIX(
"WLAN_ADDRESS_2:0x%"PRIx64
", ", tmp);
354 if(m->__wlan_address_3){
355 uint64_t tmp = m->__wlan_address_3;
357 tmp = OF1X_MAC_VALUE(NTOHB64(tmp));
358 ROFL_PIPELINE_INFO_NO_PREFIX(
"WLAN_ADDRESS_3:0x%"PRIx64
", ", tmp);
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));
367 ROFL_PIPELINE_INFO_NO_PREFIX(
"}\n");
Utils to dump the "packet header values".
void fill_packet_matches(datapacket_t *const pkt, packet_matches_t *m)
Fill in packet_matches (for PKT_INs)
void dump_packet_matches(datapacket_t *const pkt, bool raw_nbo)
Dump the values of packet (header values)