Hi, 2015-11-30 20:55 GMT+09:00 Bjørn Mork <bj...@mork.no>: > Generating a random ifid for devices with no L2 header > at all, allowing such devices to take part in IPv6 > autoconfiguration. The tuntap driver is one example of > a driver where such an ifid would be useful. > > Note that as there is no persistence, new addresses > will be generated every time an interface is brought up: > > # ip -6 addr show dev tun0 > 8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 state UNKNOWN > qlen 500 > inet6 fe80::eef2:111c:f270:92ba/64 scope link > valid_lft forever preferred_lft forever > # ip link set tun0 down > # ip link set tun0 up > # ip -6 addr show dev tun0 > 8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 state UNKNOWN > qlen 500 > inet6 fe80::eec0:48d0:6b52:8835/64 scope link > valid_lft forever preferred_lft forever > > Signed-off-by: Bjørn Mork <bj...@mork.no> > --- > I'm planning raw-ip support for the qmi_wwan driver. And > the feedback from primary users (ModemManager++) is that > a headerless netdev is preferred over a fake ethernet > device. The current plan is to model this after 'tun' > devices, using ARPHRD_NONE as type. > > But these devices will need an IPv6 link local address for > full SLAAC support. I am therefore wondering if an approach > like this patch will be acceptable, or if I should look for > some other solution? > > > > Bjørn > > > net/ipv6/addrconf.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c > index d84742f003a9..6cf3cae691a5 100644 > --- a/net/ipv6/addrconf.c > +++ b/net/ipv6/addrconf.c > @@ -53,6 +53,7 @@ > #include <linux/if_arp.h> > #include <linux/if_arcnet.h> > #include <linux/if_infiniband.h> > +#include <linux/random.h> > #include <linux/route.h> > #include <linux/inetdevice.h> > #include <linux/init.h> > @@ -2026,6 +2027,13 @@ static int addrconf_ifid_ip6tnl(u8 *eui, struct > net_device *dev) > return 0; > } > > +static int addrconf_ifid_random(u8 *eui, struct net_device *dev) > +{ > + get_random_bytes(eui, 8); > + eui[0] |= 0x02; > + return 0; > +} > +
Since random identifier is locally assigned, drop the global bit instead if setting it. --yoshfuji -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html