[ovs-discuss] About ovs_vport_init() error

Ken Ajiro ken-ajiro at xr.jp.nec.com
Tue Jan 22 09:13:59 UTC 2019


 On Mon, 21 Jan 2019 19:17:58 +0000,
 gvrose8192 at gmail.com wrote
 in E-mail "Re: [ovs-discuss] About ovs_vport_init() error":

> >    datapath/vport.c ovs_vport_init()
> >
> > 	err = ip6gre_init();
> > 	if (err && err != -EEXIST) {
> > 		goto err_ip6gre;   <==========
> > 	} else {
> > 		if (err == -EEXIST) {
> > 			pr_warn("IPv6 GRE/ERSPAN Rx mode is not supported\n");
> > 			goto skip_ip6_tunnel_init;
> > 		}
> > 	}
> >
> >    datapath/linux/compat/ip6_gre.c rpl_ip6gre_init():
> >
> > 	err = inet6_add_protocol(&ip6gre_protocol, IPPROTO_GRE);
> > 	if (err < 0) {
> > 		pr_info("%s: can't add protocol\n", __func__);   <==========
> > 		unregister_pernet_device(&ip6gre_net_ops);
> > 		goto ip6_gre_loaded;
> > 	}
> >
> >    I checked net/ipv6/protocol.c and understand that when inet6_add_protocol() failed it returns -1 (same to -EPERM) instead of -EEXIT.
> >
> >    Is it needed checking if err is -EEXIT at ovs_vport_init() ?
> 
> That's -EEXIST.

  Sorry, I spelled it wrong.

> It looks to me like  you have the gre and ip6_gre kernel
> modules already loaded.  Try unloading those first.

  Thank you for your advise. I'll try it.

> Yes, special  handling is required in that case.

  However I think that inet6_add_protocol() never return -EEXIST so I think that this special handling won't work.
  (It looks that inet6_add_protocol() returns only 0 or -1)

int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol)
{
        return !cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol],
                        NULL, prot) ? 0 : -1;
}

  Thanks,

-- 
Ken Ajiro


More information about the discuss mailing list