When comparing a network ordered value with a constant, it is better to convert the constant at compile time by means of __constant_htons() instead of converting the value at runtime using ntohs().
This refactoring may slightly improve the code performance. Signed-off-by: Antonio Quartulli <[email protected]> --- v2: - patch rebased on top of "batman-adv: use VLAN_ETH_HLEN instead of sizeof(struct vlan_eth_hdr)" v3: - use __constant* for vlan_insert_tag() argument bridge_loop_avoidance.c | 14 +++++++------- gateway_client.c | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c index 9e691b0..de02e7c 100644 --- a/bridge_loop_avoidance.c +++ b/bridge_loop_avoidance.c @@ -343,7 +343,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, } if (vid & BATADV_VLAN_HAS_TAG) - skb = vlan_insert_tag(skb, htons(ETH_P_8021Q), + skb = vlan_insert_tag(skb, __constant_htons(ETH_P_8021Q), vid & VLAN_VID_MASK); skb_reset_mac_header(skb); @@ -863,25 +863,25 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv, struct arphdr *arphdr; uint8_t *hw_src, *hw_dst; struct batadv_bla_claim_dst *bla_dst; - uint16_t proto; + __be16 proto; int headlen; unsigned short vid = BATADV_NO_FLAGS; int ret; ethhdr = eth_hdr(skb); - if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) { + if (ethhdr->h_proto == __constant_htons(ETH_P_8021Q)) { vhdr = (struct vlan_ethhdr *)ethhdr; vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK; vid |= BATADV_VLAN_HAS_TAG; - proto = ntohs(vhdr->h_vlan_encapsulated_proto); + proto = vhdr->h_vlan_encapsulated_proto; headlen = sizeof(*vhdr); } else { - proto = ntohs(ethhdr->h_proto); + proto = ethhdr->h_proto; headlen = ETH_HLEN; } - if (proto != ETH_P_ARP) + if (proto != __constant_htons(ETH_P_ARP)) return 0; /* not a claim frame */ /* this must be a ARP frame. check if it is a claim. */ @@ -1375,7 +1375,7 @@ int batadv_bla_is_backbone_gw(struct sk_buff *skb, ethhdr = (struct ethhdr *)(((uint8_t *)skb->data) + hdr_size); - if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) { + if (ethhdr->h_proto == __constant_htons(ETH_P_8021Q)) { if (!pskb_may_pull(skb, hdr_size + VLAN_ETH_HLEN)) return 0; diff --git a/gateway_client.c b/gateway_client.c index f59e58d..3cf92f8 100644 --- a/gateway_client.c +++ b/gateway_client.c @@ -682,11 +682,11 @@ bool batadv_gw_is_dhcp_target(struct sk_buff *skb, unsigned int *header_len) /* check for bootp port */ if ((proto == __constant_htons(ETH_P_IP)) && - (ntohs(udphdr->dest) != 67)) + (udphdr->dest != __constant_htons(67))) return false; if ((proto == __constant_htons(ETH_P_IPV6)) && - (ntohs(udphdr->dest) != 547)) + (udphdr->dest != __constant_htons(547))) return false; return true; -- 1.8.1.5
