X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Factions.c;h=6c1ca49cc2b5380c04e59f1feaf2fb6dfd59d79c;hb=7ee20df120d4d56df894abc00a60fe1bc43a058d;hp=c578cc4089477922ad9159306723882e2a3778bc;hpb=76abe283baa043bae84163873b0c7c498bfb260a;p=openvswitch diff --git a/datapath/actions.c b/datapath/actions.c index c578cc40..6c1ca49c 100644 --- a/datapath/actions.c +++ b/datapath/actions.c @@ -120,7 +120,7 @@ static bool is_ip(struct sk_buff *skb) static __sum16 *get_l4_checksum(struct sk_buff *skb) { - u8 nw_proto = OVS_CB(skb)->flow->key.ip.nw_proto; + u8 nw_proto = OVS_CB(skb)->flow->key.ip.proto; int transport_len = skb->len - skb_transport_offset(skb); if (nw_proto == IPPROTO_TCP) { if (likely(transport_len >= sizeof(struct tcphdr))) @@ -216,34 +216,6 @@ static struct sk_buff *set_tp_port(struct sk_buff *skb, const struct nlattr *a) return skb; } -/** - * is_spoofed_arp - check for invalid ARP packet - * - * @skb: skbuff containing an Ethernet packet, with network header pointing - * just past the Ethernet and optional 802.1Q header. - * - * Returns true if @skb is an invalid Ethernet+IPv4 ARP packet: one with screwy - * or truncated header fields or one whose inner and outer Ethernet address - * differ. - */ -static bool is_spoofed_arp(struct sk_buff *skb) -{ - struct arp_eth_header *arp; - - if (OVS_CB(skb)->flow->key.eth.type != htons(ETH_P_ARP)) - return false; - - if (skb_network_offset(skb) + sizeof(struct arp_eth_header) > skb->len) - return true; - - arp = (struct arp_eth_header *)skb_network_header(skb); - return (arp->ar_hrd != htons(ARPHRD_ETHER) || - arp->ar_pro != htons(ETH_P_IP) || - arp->ar_hln != ETH_ALEN || - arp->ar_pln != 4 || - compare_ether_addr(arp->ar_sha, eth_hdr(skb)->h_source)); -} - static void do_output(struct datapath *dp, struct sk_buff *skb, int out_port) { struct vport *p; @@ -359,16 +331,11 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb, case ODP_ACTION_ATTR_POP_PRIORITY: skb->priority = priority; break; - - case ODP_ACTION_ATTR_DROP_SPOOFED_ARP: - if (unlikely(is_spoofed_arp(skb))) - goto exit; - break; } if (!skb) return -ENOMEM; } -exit: + if (prev_port != -1) do_output(dp, skb, prev_port); else