[Devel] [PATCH RH9 3/3] vzeth: bits and pieces of our interface
Cyrill Gorcunov
gorcunov at virtuozzo.com
Wed Oct 27 16:43:32 MSK 2021
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 <gorcunov at gmail.com>
More information about the Devel
mailing list