On Fri, Nov 8, 2019 at 11:04 PM William Tu <u9012...@gmail.com> wrote:
> On Fri, Nov 08, 2019 at 05:12:55PM +0100, Matteo Croce wrote:
> > Hi,
> >
> > I need to add a field to enum ovs_action_attr, but I see that the
> > definition between the upstream header[1] and the one in compat[2]
> > differs.
> > Upstream enum stops at OVS_ACTION_ATTR_CHECK_PKT_LEN, with an extra
> > "hidden" element after __OVS_ACTION_ATTR_MAX (22)
> > Our compat version instead, has OVS_ACTION_ATTR_TUNNEL_{PUSH,POP}
> > defined only #ifndef __KERNEL__, with __OVS_ACTION_ATTR_MAX being 22
> > for the kernel and 24 for userspace.
> >
> > If I add a field OVS_ACTION_ATTR_WHATEVER just before
> > __OVS_ACTION_ATTR_MAX in the kernel, older userspace will incorrectly
> > see the new action as OVS_ACTION_ATTR_TUNNEL_PUSH.
> "older userspace" means you're using userspace datapath (dpif-netdev)?
> If true, then it's not using kernel module.
> if "older userspace" means just ovs-vswitchd using kernel module,
> and you want to upgrade ovs kernel module with your new action
> and without upgrade ovs-vswitchd?

Yes, I mean older vswitchd with a new kernel module. If I add a field
after OVS_ACTION_ATTR_TUNNEL_POP, and then I downgrade the userspace
utils I end up in this situation:

# ovs-dpctl dump-flows
in_port(1),eth(),eth_type(0x0800), packets:1, bytes:98, used:605.381s,

while adding it before OVS_ACTION_ATTR_TUNNEL_POP I get this:

# ovs-dpctl dump-flows
in_port(1),eth(),eth_type(0x0800), packets:1, bytes:98, used:3.661s,
actions:bad length 0, expected 4 for: action22,2

> Usually we also upgrade ovs-vswitchd, so I don't know how this can be done.

So it's not a problem, we can assume that the userspace can't be older
than the kernel datapath.

Matteo Croce
per aspera ad upstream

dev mailing list

Reply via email to