-always_inline void
-gbp_classify_get_src_ip4_address (const ethernet_header_t * eh0,
- const ip4_address_t ** ip4)
-{
- const ip4_header_t *iph4;
-
- iph4 = (ip4_header_t *) (eh0 + 1);
- *ip4 = &iph4->src_address;
-}
-
-always_inline void
-gbp_classify_get_src_ip6_address (const ethernet_header_t * eh0,
- const ip6_address_t ** ip6)
-{
- const ip6_header_t *iph6;
-
- iph6 = (ip6_header_t *) (eh0 + 1);
- *ip6 = &iph6->src_address;
-}
-
-always_inline void
-gbp_classify_get_src_ip_address (const ethernet_header_t * eh0,
- const ip4_address_t ** ip4,
- const ip6_address_t ** ip6)
-{
- u16 etype = clib_net_to_host_u16 (eh0->type);
-
- switch (etype)
- {
- case ETHERNET_TYPE_IP4:
- gbp_classify_get_src_ip4_address (eh0, ip4);
- break;
- case ETHERNET_TYPE_IP6:
- gbp_classify_get_src_ip6_address (eh0, ip6);
- break;
- case ETHERNET_TYPE_VLAN:
- {
- ethernet_vlan_header_t *vh0;
-
- vh0 = (ethernet_vlan_header_t *) (eh0 + 1);
-
- switch (clib_net_to_host_u16 (vh0->type))
- {
- case ETHERNET_TYPE_IP4:
- {
- gbp_classify_get_src_ip4_address (eh0, ip4);
- break;
- case ETHERNET_TYPE_IP6:
- gbp_classify_get_src_ip6_address (eh0, ip6);
- break;
- }
- }
- break;
- }
- case ETHERNET_TYPE_ARP:
- {
- const ethernet_arp_header_t *ea0;
-
- ea0 = (ethernet_arp_header_t *) (eh0 + 1);
-
- *ip4 = &ea0->ip4_over_ethernet[0].ip4;
- break;
- }
- default:
- break;
- }
-}
-