On Tuesday, May 07, 2013 19:54:02 Antonio Quartulli wrote:
> In the gateway code in case of VLAN tagged frame the ethhdr
> pointer is moved forward by 4 bytes so that the offset of
> h_proto in struct ethhdr matches the real
> h_vlan_encapsulated_proto address in the skb.
> 
> This trick is correct but the code is not easy to understand
> and may lead to bugs in case of re-use of ethhdr for other
> purposes.
> 
> Use a standalone protocol variable and assign it accordingly
> to the header type

How about adding the key word "refactoring" somewhere into the subject line or 
the commit message ?


> @@ -626,23 +626,29 @@ bool batadv_gw_is_dhcp_target(struct sk_buff *skb,
> unsigned int *header_len) struct iphdr *iphdr;
>       struct ipv6hdr *ipv6hdr;
>       struct udphdr *udphdr;
> +     uint16_t proto;
> 
>       /* check for ethernet header */
>       if (!pskb_may_pull(skb, *header_len + ETH_HLEN))
>               return false;
>       ethhdr = (struct ethhdr *)skb->data;
> +     proto = ntohs(ethhdr->h_proto);
>       *header_len += ETH_HLEN;
> 
>       /* check for initial vlan header */
> -     if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) {
> +     if (proto == ETH_P_8021Q) {
> +             struct vlan_ethhdr *vhdr;
> +

While we are refactoring I suggest to not ntohs() the protocol every time but 
the protocol constants. The compiler will replace the constants with the 
appropriate number during the compilation, thus saving us from a runtime 
operation every time we check a packet.

Cheers,
Marek

Reply via email to