ROFL-pipeline  v0.6.0dev
packet.h
Go to the documentation of this file.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #ifndef PLATFORM_PACKET_HOOKS
6 #define PLATFORM_PACKET_HOOKS
7 
8 #include <stdint.h>
9 
10 #include "rofl.h"
11 #include "../common/datapacket.h"
12 #include "../common/ternary_fields.h"
13 #include "../switch_port.h"
14 
15 #if defined(__COMPILING_ROFL_PIPELINE__) || !defined(ROFL_PIPELINE_PP_PRESENT) || !defined(ROFL_PIPELINE_INLINE_PP_PLATFORM_FUNCS)
16 
43 //C++ extern C
44 ROFL_BEGIN_DECLS
45 
47 // Packet mangling //
49 
54 uint32_t platform_packet_get_size_bytes(datapacket_t *const pkt);
55 
91 
92 
94 // Ports //
96 
102 uint32_t* platform_packet_get_port_in(datapacket_t *const pkt);
109 uint32_t* platform_packet_get_phy_port_in(datapacket_t *const pkt);
110 
116 void platform_packet_set_queue(datapacket_t* pkt, uint32_t queue);
117 
118 
120 // Ethernet //
122 
128 uint64_t* platform_packet_get_eth_src(datapacket_t *const pkt);
134 uint64_t* platform_packet_get_eth_dst(datapacket_t *const pkt);
140 uint16_t* platform_packet_get_eth_type(datapacket_t *const pkt);
141 
147 void platform_packet_set_eth_src(datapacket_t* pkt, uint64_t eth_src);
153 void platform_packet_set_eth_dst(datapacket_t* pkt, uint64_t eth_dst);
159 void platform_packet_set_eth_type(datapacket_t* pkt, uint16_t eth_type);
160 
161 
163 // 802.1q VLAN //
165 
169 bool platform_packet_has_vlan(datapacket_t *const pkt);
176 uint16_t* platform_packet_get_vlan_vid(datapacket_t *const pkt);
183 uint8_t* platform_packet_get_vlan_pcp(datapacket_t *const pkt);
189 void platform_packet_set_vlan_vid(datapacket_t* pkt, uint16_t vlan_vid);
195 void platform_packet_set_vlan_pcp(datapacket_t* pkt, uint8_t vlan_pcp);
206 void platform_packet_push_vlan(datapacket_t* pkt, uint16_t ether_type);
207 
208 
210 // MPLS //
212 
219 uint32_t* platform_packet_get_mpls_label(datapacket_t *const pkt);
226 uint8_t* platform_packet_get_mpls_tc(datapacket_t *const pkt);
233 
239 void platform_packet_set_mpls_label(datapacket_t* pkt, uint32_t label);
245 void platform_packet_set_mpls_tc(datapacket_t* pkt, uint8_t tc);
250 void platform_packet_set_mpls_bos(datapacket_t* pkt, bool bos);
255 void platform_packet_set_mpls_ttl(datapacket_t* pkt, uint8_t new_ttl);
256 
267 void platform_packet_pop_mpls(datapacket_t* pkt, uint16_t ether_type);
273 void platform_packet_push_mpls(datapacket_t* pkt, uint16_t ether_type);
274 
275 
277 // Tunnel ID //
279 
284 uint64_t* platform_packet_get_tunnel_id(datapacket_t *const pkt);
290 void platform_packet_set_tunnel_id(datapacket_t*pkt, uint64_t tunnel_id);
291 
293 // PBB //
295 
301 uint32_t* platform_packet_get_pbb_isid(datapacket_t *const pkt);
302 
308 void platform_packet_set_pbb_isid(datapacket_t*pkt, uint32_t pbb_isid);
320 void platform_packet_push_pbb(datapacket_t* pkt, uint16_t ether_type);
321 
323 // TTL common //
325 
344 void platform_packet_set_nw_ttl(datapacket_t* pkt, uint8_t new_ttl);
345 
346 
348 // IP (common) //
350 
355 uint8_t* platform_packet_get_ip_proto(datapacket_t *const pkt);
361 uint8_t platform_packet_get_ip_ecn(datapacket_t *const pkt);
368 uint8_t platform_packet_get_ip_dscp(datapacket_t *const pkt);
369 
374 void platform_packet_set_ip_proto(datapacket_t* pkt, uint8_t ip_proto);
380 void platform_packet_set_ip_dscp(datapacket_t* pkt, uint8_t ip_dscp);
385 void platform_packet_set_ip_ecn(datapacket_t* pkt, uint8_t ip_ecn);
386 
388 // ARP //
390 
395 uint16_t* platform_packet_get_arp_opcode(datapacket_t *const pkt);
402 uint64_t* platform_packet_get_arp_sha(datapacket_t *const pkt);
409 uint32_t* platform_packet_get_arp_spa(datapacket_t *const pkt);
416 uint64_t* platform_packet_get_arp_tha(datapacket_t *const pkt);
423 uint32_t* platform_packet_get_arp_tpa(datapacket_t *const pkt);
424 
429 void platform_packet_set_arp_opcode(datapacket_t* pkt, uint16_t arp_opcode);
435 void platform_packet_set_arp_sha(datapacket_t* pkt, uint64_t arp_sha);
441 void platform_packet_set_arp_spa(datapacket_t* pkt, uint32_t arp_spa);
447 void platform_packet_set_arp_tha(datapacket_t* pkt, uint64_t arp_tha);
453 void platform_packet_set_arp_tpa(datapacket_t* pkt, uint32_t arp_tpa);
454 
455 
457 // IPv4 //
459 
465 uint32_t* platform_packet_get_ipv4_src(datapacket_t *const pkt);
472 uint32_t* platform_packet_get_ipv4_dst(datapacket_t *const pkt);
473 
479 void platform_packet_set_ipv4_src(datapacket_t* pkt, uint32_t ip_src);
480 
486 void platform_packet_set_ipv4_dst(datapacket_t* pkt, uint32_t ip_dst);
487 
488 
490 // IPv6 //
492 
512 uint32_t* platform_packet_get_ipv6_flabel(datapacket_t *const pkt);
526 uint64_t* platform_packet_get_ipv6_nd_sll(datapacket_t *const pkt);
533 uint64_t* platform_packet_get_ipv6_nd_tll(datapacket_t *const pkt);
540 uint16_t* platform_packet_get_ipv6_exthdr(datapacket_t *const pkt);
541 
559 void platform_packet_set_ipv6_flabel(datapacket_t*pkt, uint64_t ipv6_flabel);
571 void platform_packet_set_ipv6_nd_sll(datapacket_t*pkt, uint64_t ipv6_nd_sll);
577 void platform_packet_set_ipv6_nd_tll(datapacket_t*pkt, uint64_t ipv6_nd_tll);
583 void platform_packet_set_ipv6_exthdr(datapacket_t*pkt, uint16_t ipv6_exthdr);
584 
586 // TCP //
588 
594 uint16_t* platform_packet_get_tcp_src(datapacket_t *const pkt);
601 uint16_t* platform_packet_get_tcp_dst(datapacket_t *const pkt);
602 
608 void platform_packet_set_tcp_src(datapacket_t* pkt, uint16_t tcp_src);
614 void platform_packet_set_tcp_dst(datapacket_t* pkt, uint16_t tcp_dst);
615 
616 
618 // UDP //
620 
626 uint16_t* platform_packet_get_udp_src(datapacket_t *const pkt);
633 uint16_t* platform_packet_get_udp_dst(datapacket_t *const pkt);
634 
640 void platform_packet_set_udp_src(datapacket_t* pkt, uint16_t udp_src);
646 void platform_packet_set_udp_dst(datapacket_t* pkt, uint16_t udp_dst);
647 
648 
650 // SCTP //
652 
658 uint16_t* platform_packet_get_sctp_src(datapacket_t *const pkt);
665 uint16_t* platform_packet_get_sctp_dst(datapacket_t *const pkt);
666 
672 void platform_packet_set_sctp_src(datapacket_t* pkt, uint16_t sctp_src);
678 void platform_packet_set_sctp_dst(datapacket_t* pkt, uint16_t sctp_dst);
679 
680 
682 // ICMPv4 //
684 
689 uint8_t* platform_packet_get_icmpv4_type(datapacket_t *const pkt);
695 uint8_t* platform_packet_get_icmpv4_code(datapacket_t *const pkt);
696 
701 void platform_packet_set_icmpv4_type(datapacket_t* pkt, uint8_t type);
706 void platform_packet_set_icmpv4_code(datapacket_t* pkt, uint8_t code);
707 
708 
710 // ICMPv6 //
712 
717 uint8_t* platform_packet_get_icmpv6_type(datapacket_t *const pkt);
723 uint8_t* platform_packet_get_icmpv6_code(datapacket_t *const pkt);
724 
729 void platform_packet_set_icmpv6_type(datapacket_t*pkt, uint8_t icmpv6_type);
734 void platform_packet_set_icmpv6_code(datapacket_t*pkt, uint8_t icmpv6_code);
735 
736 #ifdef ROFL_EXPERIMENTAL
737 /*******************/
738 /*** Extensions ***/
739 /*****************/
740 
742 // PPPoE //
744 
749 uint8_t* platform_packet_get_pppoe_code(datapacket_t *const pkt);
755 uint8_t* platform_packet_get_pppoe_type(datapacket_t *const pkt);
761 uint16_t* platform_packet_get_pppoe_sid(datapacket_t *const pkt);
762 
767 void platform_packet_set_pppoe_type(datapacket_t* pkt, uint8_t type);
772 void platform_packet_set_pppoe_code(datapacket_t* pkt, uint8_t code);
777 void platform_packet_set_pppoe_sid(datapacket_t* pkt, uint16_t sid);
778 
783 void platform_packet_pop_pppoe(datapacket_t* pkt, uint16_t ether_type);
788 void platform_packet_push_pppoe(datapacket_t* pkt, uint16_t ether_type);
789 
791 // PPP //
793 
799 uint16_t* platform_packet_get_ppp_proto(datapacket_t *const pkt);
800 
806 void platform_packet_set_ppp_proto(datapacket_t* pkt, uint16_t proto);
807 
809 // GTP //
811 
816 uint8_t* platform_packet_get_gtp_msg_type(datapacket_t *const pkt);
823 uint32_t* platform_packet_get_gtp_teid(datapacket_t *const pkt);
824 
829 void platform_packet_set_gtp_msg_type(datapacket_t* pkt, uint8_t msg_type);
835 void platform_packet_set_gtp_teid(datapacket_t* pkt, uint32_t teid);
836 
841 void platform_packet_pop_gtp(datapacket_t* pkt, uint16_t ether_type);
845 void platform_packet_push_gtp(datapacket_t* pkt, uint16_t ether_type);
846 
847 
848 
850 // CAPWAP //
852 
857 uint8_t* platform_packet_get_capwap_wbid(datapacket_t *const pkt);
864 uint8_t* platform_packet_get_capwap_rid(datapacket_t *const pkt);
871 uint16_t* platform_packet_get_capwap_flags(datapacket_t *const pkt);
872 
877 void platform_packet_set_capwap_wbid(datapacket_t* pkt, uint8_t wbid);
882 void platform_packet_set_capwap_rid(datapacket_t* pkt, uint8_t rid);
888 void platform_packet_set_capwap_flags(datapacket_t* pkt, uint16_t flags);
889 
894 void platform_packet_pop_capwap(datapacket_t* pkt);
898 void platform_packet_push_capwap(datapacket_t* pkt);
899 
900 
901 
903 // WLAN //
905 
911 uint16_t* platform_packet_get_wlan_fc(datapacket_t *const pkt);
918 uint8_t* platform_packet_get_wlan_type(datapacket_t *const pkt);
925 uint8_t* platform_packet_get_wlan_subtype(datapacket_t *const pkt);
932 uint8_t* platform_packet_get_wlan_direction(datapacket_t *const pkt);
939 uint64_t* platform_packet_get_wlan_address_1(datapacket_t *const pkt);
946 uint64_t* platform_packet_get_wlan_address_2(datapacket_t *const pkt);
953 uint64_t* platform_packet_get_wlan_address_3(datapacket_t *const pkt);
954 
960 void platform_packet_set_wlan_fc(datapacket_t* pkt, uint16_t fc);
965 void platform_packet_set_wlan_type(datapacket_t* pkt, uint8_t type);
970 void platform_packet_set_wlan_subtype(datapacket_t* pkt, uint8_t subtype);
975 void platform_packet_set_wlan_direction(datapacket_t* pkt, uint8_t direction);
981 void platform_packet_set_wlan_address_1(datapacket_t* pkt, uint64_t address_1);
987 void platform_packet_set_wlan_address_2(datapacket_t* pkt, uint64_t address_2);
993 void platform_packet_set_wlan_address_3(datapacket_t* pkt, uint64_t address_3);
994 
999 void platform_packet_pop_wlan(datapacket_t* pkt);
1003 void platform_packet_push_wlan(datapacket_t* pkt);
1004 
1005 
1007 // GRE //
1009 
1014 uint16_t* platform_packet_get_gre_version(datapacket_t *const pkt);
1020 uint16_t* platform_packet_get_gre_prot_type(datapacket_t *const pkt);
1027 uint32_t* platform_packet_get_gre_key(datapacket_t *const pkt);
1028 
1033 void platform_packet_set_gre_version(datapacket_t* pkt, uint16_t version);
1038 void platform_packet_set_gre_prot_type(datapacket_t* pkt, uint16_t prot_type);
1044 void platform_packet_set_gre_key(datapacket_t* pkt, uint32_t key);
1045 
1050 void platform_packet_pop_gre(datapacket_t* pkt, uint16_t ether_type);
1054 void platform_packet_push_gre(datapacket_t* pkt, uint16_t ether_type);
1055 
1056 
1057 
1058 
1059 /* end of extensions */
1060 #endif
1061 
1062 
1063 //C++ extern C
1064 ROFL_END_DECLS
1065 
1066 #endif //if
1067 #endif //PLATFORM_PACKET_HOOKS
uint32_t * platform_packet_get_arp_tpa(datapacket_t *const pkt)
Get the ARP TPA value of the packet.
void platform_packet_pop_mpls(datapacket_t *pkt, uint16_t ether_type)
Pop outer-most MPLS tag, setting the BoS accordingly.
void platform_packet_set_pbb_isid(datapacket_t *pkt, uint32_t pbb_isid)
Set a new value for the PBB I-SID of the packet.
void platform_packet_set_tcp_dst(datapacket_t *pkt, uint16_t tcp_dst)
Set a new value for the TCP dst port.
uint64_t * platform_packet_get_arp_tha(datapacket_t *const pkt)
Get the ARP THA value of the packet.
void platform_packet_set_sctp_src(datapacket_t *pkt, uint16_t sctp_src)
Set a new value for the SCTP src port.
void platform_packet_set_nw_ttl(datapacket_t *pkt, uint8_t new_ttl)
Set new ttl value.
void platform_packet_push_vlan(datapacket_t *pkt, uint16_t ether_type)
Push a new 802.1q VLAN tag (outer-most)
void platform_packet_set_mpls_bos(datapacket_t *pkt, bool bos)
Set a new MPLS BoS value to the outer-most MPLS tag of the packet.
void platform_packet_output(datapacket_t *pkt, switch_port_t *port)
Output packet to the port(s) The action HAS to implement the destruction/release of the pkt (includin...
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.
void platform_packet_set_arp_tha(datapacket_t *pkt, uint64_t arp_tha)
Set a new value for the ARP THA header field.
void platform_packet_set_mpls_ttl(datapacket_t *pkt, uint8_t new_ttl)
Set a new TTL value to the outer-most MPLS tag of the packet.
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.
void platform_packet_set_udp_src(datapacket_t *pkt, uint16_t udp_src)
Set a new value for the UDP src port.
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.
void platform_packet_set_icmpv6_code(datapacket_t *pkt, uint8_t icmpv6_code)
Set a new value for the ICMPv6 code.
void platform_packet_set_icmpv6_type(datapacket_t *pkt, uint8_t icmpv6_type)
Set a new value for the ICMPv6 type.
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.
void platform_packet_set_arp_tpa(datapacket_t *pkt, uint32_t arp_tpa)
Set a new value for the ARP TPA header field.
void platform_packet_set_arp_opcode(datapacket_t *pkt, uint16_t arp_opcode)
Set a new value for the ARP OPCODE header field.
void platform_packet_set_icmpv4_type(datapacket_t *pkt, uint8_t type)
Set a new value for the ICMPv4 type.
uint128__t * platform_packet_get_ipv6_nd_target(datapacket_t *const pkt)
Get the IPv6 nd target of the packet.
void platform_packet_set_sctp_dst(datapacket_t *pkt, uint16_t sctp_dst)
Set a new value for the SCTP dst port.
datapacket_t * platform_packet_replicate(datapacket_t *pkt)
Creates a copy (in heap) of the datapacket_t structure including any platform specific state (->platf...
uint64_t * platform_packet_get_arp_sha(datapacket_t *const pkt)
Get the ARP SHA value of the packet.
void platform_packet_pop_vlan(datapacket_t *pkt)
Pop the outer-most 802.1q VLAN tag.
void platform_packet_set_eth_dst(datapacket_t *pkt, uint64_t eth_dst)
Set a new Ethernet dst MAC address to the packet.
void platform_packet_pop_pbb(datapacket_t *pkt)
Pop outer-most PBB header.
void platform_packet_set_ip_ecn(datapacket_t *pkt, uint8_t ip_ecn)
Set a new value for the IP ECN header field.
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.
void platform_packet_set_tcp_src(datapacket_t *pkt, uint16_t tcp_src)
Set a new value for the TCP src port.
uint64_t * platform_packet_get_eth_src(datapacket_t *const pkt)
Retrieve the Ethernet src MAC address of the packet.
void platform_packet_set_arp_spa(datapacket_t *pkt, uint32_t arp_spa)
Set a new value for the ARP SPA header field.
Port abstraction.
Definition: switch_port.h:145
void platform_packet_set_ipv6_dst(datapacket_t *pkt, uint128__t ipv6_dst)
Set a new value for the IPv6 dst address.
uint64_t * platform_packet_get_ipv6_nd_sll(datapacket_t *const pkt)
Get the IPv6 nd sll of the packet.
void platform_packet_dec_nw_ttl(datapacket_t *pkt)
Decrement ttl.
void platform_packet_set_ipv6_flabel(datapacket_t *pkt, uint64_t ipv6_flabel)
Set a new value for the IPv6 label.
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.
void platform_packet_set_mpls_tc(datapacket_t *pkt, uint8_t tc)
Set a new TC value to the outer-most MPLS MPLS tag of the packet.
void platform_packet_set_queue(datapacket_t *pkt, uint32_t queue)
Set output queue of the packet.
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.
void platform_packet_set_ipv4_dst(datapacket_t *pkt, uint32_t ip_dst)
Set a new value for the IPv4 dst address.
void platform_packet_set_ipv4_src(datapacket_t *pkt, uint32_t ip_src)
Set a new value for the IPv4 src address.
void platform_packet_set_ipv6_nd_tll(datapacket_t *pkt, uint64_t ipv6_nd_tll)
Set a new value for the IPv6 nd tll.
uint32_t * platform_packet_get_ipv4_dst(datapacket_t *const pkt)
Get the IPv4 dst address of the packet.
void platform_packet_set_vlan_pcp(datapacket_t *pkt, uint8_t vlan_pcp)
Set a new VLAN PCP value to the outer-most VLAN of the packet.
void platform_packet_set_mpls_label(datapacket_t *pkt, uint32_t label)
Set a new label to the outer-most MPLS tag of the packet.
uint64_t * platform_packet_get_tunnel_id(datapacket_t *const pkt)
Get Tunnel ID.
void platform_packet_push_mpls(datapacket_t *pkt, uint16_t ether_type)
Push a new MPLS tag (outer-most), and set inner and outer tag BoS accordingly.
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...
void platform_packet_set_udp_dst(datapacket_t *pkt, uint16_t udp_dst)
Set a new value for the UDP dst port.
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.
void platform_packet_copy_ttl_out(datapacket_t *pkt)
Copy ttl out.
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 platform_packet_set_eth_src(datapacket_t *pkt, uint64_t eth_src)
Set a new Ethernet src MAC address to the packet.
uint64_t * platform_packet_get_eth_dst(datapacket_t *const pkt)
Retrieve the Ethernet dst MAC address of the packet.
void platform_packet_set_ipv6_exthdr(datapacket_t *pkt, uint16_t ipv6_exthdr)
Set a new value for the IPv6 exthdr.
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.
void platform_packet_set_ipv6_nd_target(datapacket_t *pkt, uint128__t ipv6_nd_target)
Set a new value for the IPv6 nd target.
void platform_packet_set_ipv6_src(datapacket_t *pkt, uint128__t ipv6_src)
Set a new value for the IPv6 src address.
void platform_packet_set_arp_sha(datapacket_t *pkt, uint64_t arp_sha)
Set a new value for the ARP SHA header field.
void platform_packet_set_ip_dscp(datapacket_t *pkt, uint8_t ip_dscp)
Set a new value for the IP DSCP header field.
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.
void platform_packet_dec_mpls_ttl(datapacket_t *pkt)
Decrement the ttl from the outer-most MPLS tag of the packet.
void platform_packet_set_icmpv4_code(datapacket_t *pkt, uint8_t code)
Set a new value for the ICMPv4 code.
void platform_packet_set_tunnel_id(datapacket_t *pkt, uint64_t tunnel_id)
Set Tunnel ID.
void platform_packet_set_ipv6_nd_sll(datapacket_t *pkt, uint64_t ipv6_nd_sll)
Set a new value for the IPv6 nd sll.
void platform_packet_drop(datapacket_t *pkt)
Creates a copy (in heap) of the datapacket_t structure including any platform specific state (->platf...
void platform_packet_push_pbb(datapacket_t *pkt, uint16_t ether_type)
Push PBB header (outer-most)
void platform_packet_set_eth_type(datapacket_t *pkt, uint16_t eth_type)
Set a new ETH_TYPE to the packet if it is 802.X.
void platform_packet_set_vlan_vid(datapacket_t *pkt, uint16_t vlan_vid)
Set a new VLAN VID value to the outer-most VLAN of the packet.
void platform_packet_copy_ttl_in(datapacket_t *pkt)
Copy ttl in.
void platform_packet_set_ip_proto(datapacket_t *pkt, uint8_t ip_proto)
Set a new value for the IP PROTO header field.
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.