On 27.10.2021 16:25, Cyrill Gorcunov wrote:
Very good job, Pasha! I've just a few comments but I really like
the current result.
Thanks!
On Wed, Oct 27, 2021 at 04:05:20PM +0300, Pavel Tikhomirov wrote:
NETIF_F_GRO_UDP_FWD_BIT, /* Allow UDP GRO for forwarding */
- /* here goes NETIF_F_HW_MACSEC_BIT in ms, temporarily reverted */
- /* Offload MACsec operations */
- NETIF_F_VENET_BIT, /* Device is venet device */
Should not we bring NETIF_F_HW_MACSEC_BIT back here?
It was never there, this hunk is a clean revert of
12b9b0869be8 ("drivers/net/ve: venet network device introduced")
diff --git a/include/linux/netdev_features.h
b/include/linux/netdev_features.h
index 1d15a4688b71..fbc8d5dd9799 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -84,6 +84,9 @@ enum {
NETIF_F_GRO_FRAGLIST_BIT, /* Fraglist GRO */
NETIF_F_GRO_UDP_FWD_BIT, /* Allow UDP GRO for forwarding */
+ /* here goes NETIF_F_HW_MACSEC_BIT in ms, temporarily reverted
*/
+ /* Offload MACsec operations */
+ NETIF_F_VENET_BIT, /* Device is venet device */
NETIF_F_HW_HSR_TAG_INS_BIT, /* Offload HSR tag insertion */
NETIF_F_HW_HSR_TAG_RM_BIT, /* Offload HSR tag removal */
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index 2b1d004d6a1f..dfd0a989c4ab 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -33,7 +33,10 @@ static inline int should_deliver(const struct
net_bridge_port *p,
int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff
*skb)
{
skb_push(skb, ETH_HLEN);
- if (!(skb->dev->features & NETIF_F_VENET) &&
+ if (
+#ifdef CONFIG_VE
+ !(skb->dev->ve_features & NETIF_F_VENET) &&
+#endif
!is_skb_forwardable(skb->dev, skb))
goto drop;
Maybe instead of such ugly constructions we could do something like
#ifdef CONFIG_VE
if (!(skb->dev->ve_features & NETIF_F_VENET))
goto drop;
#endif
if (!is_skb_forwardable(skb->dev, skb))
goto drop;
Wow, your construction is wrong =)
my: if (!A && !B)
yours: if (!A || !B)
But I get what you say, and I think "you way" if its don right looks not
much better:
if (!B)
#ifdef CONFIG_VE
if (!A)
#endif
goto out;
after all the compiler will have to test both conditions so I don't think
we improve anything if merge them into one ugly if statement. What do you
think?
@@ -11425,7 +11425,7 @@ netdev_features_t
netdev_increment_features(netdev_features_t all,
mask |= NETIF_F_CSUM_MASK;
mask |= NETIF_F_VLAN_CHALLENGED;
- all |= one & (NETIF_F_ONE_FOR_ALL|NETIF_F_CSUM_MASK|NETIF_F_VIRTUAL) & mask;
+ all |= one & (NETIF_F_ONE_FOR_ALL | NETIF_F_CSUM_MASK) & mask;
all &= one | ~NETIF_F_ALL_FOR_ALL;
This looks somehow suspicious, we no longer consider virtual bit here.
Are you sure it is expected?
Yes it's expected: we don't change net_device->features anymore so we
can remove all ugly workarounds we had to make it work with features
iteration logic.
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index bf4d8cdb9725..54964c5d3f1f 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -378,7 +378,10 @@ static int __fib_validate_source(struct sk_buff *skb,
__be32 src, __be32 dst,
if (fib_lookup(net, &fl4, &res, 0))
goto last_resort;
if (res.type != RTN_UNICAST &&
- (!(dev->features & NETIF_F_VENET) ||
+ (
+#ifdef CONFIG_VE
+ !(dev->ve_features & NETIF_F_VENET) ||
+#endif
res.type != RTN_LOCAL || !IN_DEV_ACCEPT_LOCAL(idev)))
goto e_inval;
Meh :) But seems the only option)
Same as with previous hunk =) I would rather leave it like this
+++ b/net/ipv4/ipip.c
@@ -384,7 +384,9 @@ static void ipip_tunnel_setup(struct net_device *dev)
netif_keep_dst(dev);
dev->features |= IPIP_FEATURES;
- dev->features |= NETIF_F_VIRTUAL;
+#ifdef CONFIG_VE
+ dev->ve_features = NETIF_F_VIRTUAL;
+#endif
Please align assignment to be similar with code around, ie
dev->ve_features = NETIF_F_VIRTUAL;
I don't think it's strictly required, but ok.
@@ -1445,7 +1445,9 @@ static void ipip6_tunnel_setup(struct net_device *dev)
dev->addr_len = 4;
dev->features |= NETIF_F_LLTX;
dev->features |= SIT_FEATURES;
- dev->features |= NETIF_F_VIRTUAL;
+#ifdef CONFIG_VE
+ dev->ve_features = NETIF_F_VIRTUAL;
+#endif
Same here.
+++ b/net/netfilter/nf_nat_redirect.c
@@ -60,7 +60,7 @@ nf_nat_redirect_ipv4(struct sk_buff *skb,
* should use first nonloopback ifa in
* the list.
*/
- if (skb->dev->features & NETIF_F_VENET) {
+ if (skb->dev->ve_features & NETIF_F_VENET) {
#ifdef CONFIG_VE above?
It's already surrounded there. Look into nf_nat_redirect_ipv4.
Cyrill
--
Best regards, Tikhomirov Pavel
Software Developer, Virtuozzo.
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel