On Wed, Oct 27, 2021 at 04:05:21PM +0300, Pavel Tikhomirov wrote: > > +#ifdef CONFIG_VE > +static int vzethdev_filter(struct sk_buff *skb, struct net_device *dev, > struct net_device *rcv) > +{ > + /* Filtering */ > + if (ve_is_super(dev_net(dev)->owner_ve) && > + dev->ve_features & NETIF_F_FIXED_ADDR) { > + /* from VE0 to VEX */ > + if (ve_is_super(dev_net(rcv)->owner_ve)) > + return 1; > + if (is_multicast_ether_addr( > + ((struct ethhdr *)skb->data)->h_dest)) > + return 1; > + if (!ether_addr_equal(((struct ethhdr *)skb->data)->h_dest, > + rcv->dev_addr)) > + return 0; > + } else if (!ve_is_super(dev_net(dev)->owner_ve) && > + dev->ve_features & NETIF_F_FIXED_ADDR) { > + /* from VEX to VE0 */ > + if (!ether_addr_equal(((struct ethhdr *)skb->data)->h_source, > + dev->dev_addr)) > + return 0; > + } > + > + return 1; > +} > +#endif
Since we're reworking this function anyway how about make it more readable, say static int vzethdev_filter(struct sk_buff *skb, struct net_device *dev, struct net_device *rcv) { struct ethhdr *e; if (!(dev->ve_features & NETIF_F_FIXED_ADDR)) return 1; e = (struct ethhdr *)skb->data; if (ve_is_super(dev_net(dev)->owner_ve)) { /* from VE0 to VEX */ if (ve_is_super(dev_net(rcv)->owner_ve)) return 1; if (is_multicast_ether_addr(e->h_dest)) return 1; if (!ether_addr_equal(e->h_dest, rcv->dev_addr)) return 0; } else { /* from VEX to VE0 */ if (!ether_addr_equal(e->h_source, dev->dev_addr)) return 0; } return 1; } if only I didn't miss somthing obvious. Up to you. The patch looks great for me in any way. Acked-by: Cyrill Gorcunov <gorcu...@gmail.com> _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel