On Tue, 25 Jan 2022 09:24:18 -0500 Sun Shouxin wrote:
+/* determine if the packet is NA or NS */if (ip6hdr->nexthdr != IPPROTO_ICMPV6)
+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) {
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;Why create a full helper for this condition? Why not just:
+
+ hdr = icmp6_hdr(skb);
+ return __alb_determine_nd(hdr);
return hdr->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT ||
hdr->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION;
+ }
+
+ return false;
+}