Re: [PATCH v10] net: bonding: Add support for IPV6 ns/na to balance-alb/balance-tlb mode

From: Jakub Kicinski
Date: Thu Jan 27 2022 - 21:47:30 EST


On Tue, 25 Jan 2022 09:24:18 -0500 Sun Shouxin wrote:
> +/* determine if the packet is NA or NS */
> +static bool __alb_determine_nd(struct icmp6hdr *hdr)
> +{
> + if (hdr->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT ||
> + hdr->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) {
> + return true;
> + }
> +
> + return false;
> +}
> +
> +static bool alb_determine_nd(struct sk_buff *skb, struct bonding *bond)
> +{
> + struct ipv6hdr *ip6hdr;
> + struct icmp6hdr *hdr;
> +
> + if (!pskb_network_may_pull(skb, sizeof(*ip6hdr)))
> + return true;
> +
> + ip6hdr = ipv6_hdr(skb);
> + if (ip6hdr->nexthdr == IPPROTO_ICMPV6) {

if (ip6hdr->nexthdr != IPPROTO_ICMPV6)
return false;

This way there's no need to indent the rest of the function.

> + if (!pskb_may_pull(skb, sizeof(*ip6hdr) + sizeof(*hdr)))

What happened to the _network part? pskb_network_may_pull(), right?

> + return true;
> +
> + hdr = icmp6_hdr(skb);
> + return __alb_determine_nd(hdr);

Why create a full helper for this condition? Why not just:

return hdr->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT ||
hdr->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION;


> + }
> +
> + return false;
> +}