From: Stefan Schmidt <stefan-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org> To: Alexander Aring <aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>, linux-wpan-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org, marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org, jukka.rissanen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, hannes-tFNcAqjVMyqKXQKiL6tip0B+6BGkLq7r@public.gmane.org, mcr-SWp7JaYWvAQV+D8aMU/kSg@public.gmane.org, werner-SEdMjqphH88wryQfseakQg@public.gmane.org, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, "David S . Miller" <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>, Alexey Kuznetsov <kuznet-v/Mj1YrvjDBInbfyfbPRSQ@public.gmane.org>, James Morris <jmorris-gx6/JNMH7DfYtjvyW6yDsg@public.gmane.org>, Hideaki YOSHIFUJI <yoshfuji-VfPWfsRibaP+Ru+s062T9g@public.gmane.org>, Patrick McHardy <kaber-dcUjhNyLwpNeoWH0uzbU5w@public.gmane.org> Subject: Re: [PATCHv2 bluetooth-next 02/10] 6lowpan: add 802.15.4 short addr slaac Date: Tue, 3 May 2016 20:16:42 +0200 [thread overview] Message-ID: <5728EB0A.5080108@osg.samsung.com> (raw) In-Reply-To: <1461140382-4784-3-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> Hello. On 20/04/16 10:19, Alexander Aring wrote: > This patch adds the autoconfiguration if a valid 802.15.4 short address > is available for 802.15.4 6LoWPAN interfaces. > > Cc: David S. Miller<davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org> > Cc: Alexey Kuznetsov<kuznet-v/Mj1YrvjDBInbfyfbPRSQ@public.gmane.org> > Cc: James Morris<jmorris-gx6/JNMH7DfYtjvyW6yDsg@public.gmane.org> > Cc: Hideaki YOSHIFUJI<yoshfuji-VfPWfsRibaP+Ru+s062T9g@public.gmane.org> > Cc: Patrick McHardy<kaber-dcUjhNyLwpNeoWH0uzbU5w@public.gmane.org> > Signed-off-by: Alexander Aring<aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> > --- > include/net/addrconf.h | 3 +++ > net/6lowpan/core.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > net/ipv6/addrconf.c | 5 +++-- > 3 files changed, 52 insertions(+), 2 deletions(-) > > diff --git a/include/net/addrconf.h b/include/net/addrconf.h > index 730d856..b1774eb 100644 > --- a/include/net/addrconf.h > +++ b/include/net/addrconf.h > @@ -94,6 +94,9 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2, > void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr); > void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr); > > +void addrconf_add_linklocal(struct inet6_dev *idev, > + const struct in6_addr *addr, u32 flags); > + > static inline int addrconf_ifid_eui48(u8 *eui, struct net_device *dev) > { > if (dev->addr_len != ETH_ALEN) > diff --git a/net/6lowpan/core.c b/net/6lowpan/core.c > index 7a240b3..fbae31e 100644 > --- a/net/6lowpan/core.c > +++ b/net/6lowpan/core.c > @@ -14,6 +14,7 @@ > #include <linux/module.h> > > #include <net/6lowpan.h> > +#include <net/addrconf.h> > > #include "6lowpan_i.h" > > @@ -72,16 +73,61 @@ void lowpan_unregister_netdev(struct net_device *dev) > } > EXPORT_SYMBOL(lowpan_unregister_netdev); > > +static int addrconf_ifid_802154_6lowpan(u8 *eui, struct net_device *dev) > +{ > + struct wpan_dev *wpan_dev = lowpan_802154_dev(dev)->wdev->ieee802154_ptr; > + > + /* Set short_addr autoconfiguration if short_addr is present only */ > + if (!ieee802154_is_valid_src_short_addr(wpan_dev->short_addr)) > + return -1; -EINVAL instead of -1? > + > + /* For either address format, all zero addresses MUST NOT be used */ > + if (wpan_dev->pan_id == cpu_to_le16(0x0000) && > + wpan_dev->short_addr == cpu_to_le16(0x0000)) > + return -1; -EINVAL instead of -1? > + > + /* Alternatively, if no PAN ID is known, 16 zero bits may be used */ > + if (wpan_dev->pan_id == cpu_to_le16(IEEE802154_PAN_ID_BROADCAST)) > + memset(eui, 0, 2); > + else > + ieee802154_le16_to_be16(eui, &wpan_dev->pan_id); > + > + /* The "Universal/Local" (U/L) bit shall be set to zero */ > + eui[0] &= ~2; > + eui[2] = 0; > + eui[3] = 0xFF; > + eui[4] = 0xFE; > + eui[5] = 0; > + ieee802154_le16_to_be16(&eui[6], &wpan_dev->short_addr); > + return 0; > +} > + > static int lowpan_event(struct notifier_block *unused, > unsigned long event, void *ptr) > { > struct net_device *dev = netdev_notifier_info_to_dev(ptr); > + struct inet6_dev *idev; > + struct in6_addr addr; > int i; > > if (dev->type != ARPHRD_6LOWPAN) > return NOTIFY_DONE; > > + idev = __in6_dev_get(dev); > + if (!idev) > + return NOTIFY_DONE; > + > switch (event) { > + case NETDEV_UP: > + case NETDEV_CHANGE: > + /* (802.15.4 6LoWPAN short address slaac handling */ > + if (lowpan_is_ll(dev, LOWPAN_LLTYPE_IEEE802154) && > + addrconf_ifid_802154_6lowpan(addr.s6_addr + 8, dev) == 0) { I normally would like to get a define here instead of the magic number 8, but given how complex this if statement already is I think its fine to keep it. > + __ipv6_addr_set_half(&addr.s6_addr32[0], > + htonl(0xFE800000), 0); > + addrconf_add_linklocal(idev, &addr, 0); > + } > + break; > case NETDEV_DOWN: > for (i = 0; i < LOWPAN_IPHC_CTX_TABLE_SIZE; i++) > clear_bit(LOWPAN_IPHC_CTX_FLAG_ACTIVE, > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c > index 27aed1a..54e18c2 100644 > --- a/net/ipv6/addrconf.c > +++ b/net/ipv6/addrconf.c > @@ -2948,8 +2948,8 @@ static void init_loopback(struct net_device *dev) > } > } > > -static void addrconf_add_linklocal(struct inet6_dev *idev, > - const struct in6_addr *addr, u32 flags) > +void addrconf_add_linklocal(struct inet6_dev *idev, > + const struct in6_addr *addr, u32 flags) > { > struct inet6_ifaddr *ifp; > u32 addr_flags = flags | IFA_F_PERMANENT; > @@ -2968,6 +2968,7 @@ static void addrconf_add_linklocal(struct inet6_dev *idev, > in6_ifa_put(ifp); > } > } > +EXPORT_SYMBOL(addrconf_add_linklocal); > > static bool ipv6_reserved_interfaceid(struct in6_addr address) > { Reviewed-by: Stefan Schmidt<stefan-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org> regards Stefan Schmidt
WARNING: multiple messages have this Message-ID (diff)
From: Stefan Schmidt <stefan@osg.samsung.com> To: Alexander Aring <aar@pengutronix.de>, linux-wpan@vger.kernel.org Cc: kernel@pengutronix.de, marcel@holtmann.org, jukka.rissanen@linux.intel.com, hannes@stressinduktion.org, mcr@sandelman.ca, werner@almesberger.net, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, "David S . Miller" <davem@davemloft.net>, Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>, James Morris <jmorris@namei.org>, Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>, Patrick McHardy <kaber@trash.net> Subject: Re: [PATCHv2 bluetooth-next 02/10] 6lowpan: add 802.15.4 short addr slaac Date: Tue, 3 May 2016 20:16:42 +0200 [thread overview] Message-ID: <5728EB0A.5080108@osg.samsung.com> (raw) In-Reply-To: <1461140382-4784-3-git-send-email-aar@pengutronix.de> Hello. On 20/04/16 10:19, Alexander Aring wrote: > This patch adds the autoconfiguration if a valid 802.15.4 short address > is available for 802.15.4 6LoWPAN interfaces. > > Cc: David S. Miller<davem@davemloft.net> > Cc: Alexey Kuznetsov<kuznet@ms2.inr.ac.ru> > Cc: James Morris<jmorris@namei.org> > Cc: Hideaki YOSHIFUJI<yoshfuji@linux-ipv6.org> > Cc: Patrick McHardy<kaber@trash.net> > Signed-off-by: Alexander Aring<aar@pengutronix.de> > --- > include/net/addrconf.h | 3 +++ > net/6lowpan/core.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > net/ipv6/addrconf.c | 5 +++-- > 3 files changed, 52 insertions(+), 2 deletions(-) > > diff --git a/include/net/addrconf.h b/include/net/addrconf.h > index 730d856..b1774eb 100644 > --- a/include/net/addrconf.h > +++ b/include/net/addrconf.h > @@ -94,6 +94,9 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2, > void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr); > void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr); > > +void addrconf_add_linklocal(struct inet6_dev *idev, > + const struct in6_addr *addr, u32 flags); > + > static inline int addrconf_ifid_eui48(u8 *eui, struct net_device *dev) > { > if (dev->addr_len != ETH_ALEN) > diff --git a/net/6lowpan/core.c b/net/6lowpan/core.c > index 7a240b3..fbae31e 100644 > --- a/net/6lowpan/core.c > +++ b/net/6lowpan/core.c > @@ -14,6 +14,7 @@ > #include <linux/module.h> > > #include <net/6lowpan.h> > +#include <net/addrconf.h> > > #include "6lowpan_i.h" > > @@ -72,16 +73,61 @@ void lowpan_unregister_netdev(struct net_device *dev) > } > EXPORT_SYMBOL(lowpan_unregister_netdev); > > +static int addrconf_ifid_802154_6lowpan(u8 *eui, struct net_device *dev) > +{ > + struct wpan_dev *wpan_dev = lowpan_802154_dev(dev)->wdev->ieee802154_ptr; > + > + /* Set short_addr autoconfiguration if short_addr is present only */ > + if (!ieee802154_is_valid_src_short_addr(wpan_dev->short_addr)) > + return -1; -EINVAL instead of -1? > + > + /* For either address format, all zero addresses MUST NOT be used */ > + if (wpan_dev->pan_id == cpu_to_le16(0x0000) && > + wpan_dev->short_addr == cpu_to_le16(0x0000)) > + return -1; -EINVAL instead of -1? > + > + /* Alternatively, if no PAN ID is known, 16 zero bits may be used */ > + if (wpan_dev->pan_id == cpu_to_le16(IEEE802154_PAN_ID_BROADCAST)) > + memset(eui, 0, 2); > + else > + ieee802154_le16_to_be16(eui, &wpan_dev->pan_id); > + > + /* The "Universal/Local" (U/L) bit shall be set to zero */ > + eui[0] &= ~2; > + eui[2] = 0; > + eui[3] = 0xFF; > + eui[4] = 0xFE; > + eui[5] = 0; > + ieee802154_le16_to_be16(&eui[6], &wpan_dev->short_addr); > + return 0; > +} > + > static int lowpan_event(struct notifier_block *unused, > unsigned long event, void *ptr) > { > struct net_device *dev = netdev_notifier_info_to_dev(ptr); > + struct inet6_dev *idev; > + struct in6_addr addr; > int i; > > if (dev->type != ARPHRD_6LOWPAN) > return NOTIFY_DONE; > > + idev = __in6_dev_get(dev); > + if (!idev) > + return NOTIFY_DONE; > + > switch (event) { > + case NETDEV_UP: > + case NETDEV_CHANGE: > + /* (802.15.4 6LoWPAN short address slaac handling */ > + if (lowpan_is_ll(dev, LOWPAN_LLTYPE_IEEE802154) && > + addrconf_ifid_802154_6lowpan(addr.s6_addr + 8, dev) == 0) { I normally would like to get a define here instead of the magic number 8, but given how complex this if statement already is I think its fine to keep it. > + __ipv6_addr_set_half(&addr.s6_addr32[0], > + htonl(0xFE800000), 0); > + addrconf_add_linklocal(idev, &addr, 0); > + } > + break; > case NETDEV_DOWN: > for (i = 0; i < LOWPAN_IPHC_CTX_TABLE_SIZE; i++) > clear_bit(LOWPAN_IPHC_CTX_FLAG_ACTIVE, > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c > index 27aed1a..54e18c2 100644 > --- a/net/ipv6/addrconf.c > +++ b/net/ipv6/addrconf.c > @@ -2948,8 +2948,8 @@ static void init_loopback(struct net_device *dev) > } > } > > -static void addrconf_add_linklocal(struct inet6_dev *idev, > - const struct in6_addr *addr, u32 flags) > +void addrconf_add_linklocal(struct inet6_dev *idev, > + const struct in6_addr *addr, u32 flags) > { > struct inet6_ifaddr *ifp; > u32 addr_flags = flags | IFA_F_PERMANENT; > @@ -2968,6 +2968,7 @@ static void addrconf_add_linklocal(struct inet6_dev *idev, > in6_ifa_put(ifp); > } > } > +EXPORT_SYMBOL(addrconf_add_linklocal); > > static bool ipv6_reserved_interfaceid(struct in6_addr address) > { Reviewed-by: Stefan Schmidt<stefan@osg.samsung.com> regards Stefan Schmidt
next prev parent reply other threads:[~2016-05-03 18:16 UTC|newest] Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-04-20 8:19 [PATCHv2 bluetooth-next 00/10] 6lowpan: introduce basic 6lowpan-nd Alexander Aring 2016-04-20 8:19 ` Alexander Aring [not found] ` <1461140382-4784-1-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 01/10] 6lowpan: add private neighbour data Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-02 18:59 ` Hannes Frederic Sowa 2016-05-04 10:43 ` Alexander Aring 2016-05-03 18:16 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 02/10] 6lowpan: add 802.15.4 short addr slaac Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-02 19:06 ` Hannes Frederic Sowa [not found] ` <1461140382-4784-3-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-03 18:16 ` Stefan Schmidt [this message] 2016-05-03 18:16 ` Stefan Schmidt 2016-05-06 9:26 ` Alexander Aring 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 03/10] 6lowpan: remove ipv6 module request Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-02 19:06 ` Hannes Frederic Sowa 2016-05-03 18:16 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 04/10] ndisc: add addr_len parameter to ndisc_opt_addr_space Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-02 19:37 ` Hannes Frederic Sowa 2016-05-04 12:30 ` Alexander Aring [not found] ` <800c5c08-c2c8-3b44-d457-cdcf6374f280-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-06 22:23 ` Hannes Frederic Sowa 2016-05-06 22:23 ` Hannes Frederic Sowa 2016-05-08 10:39 ` Alexander Aring 2016-05-18 21:39 ` Michael Richardson 2016-05-18 21:39 ` Michael Richardson 2016-05-03 18:17 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 05/10] ndisc: add addr_len parameter to ndisc_opt_addr_data Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-03 18:17 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 07/10] ipv6: introduce neighbour discovery ops Alexander Aring 2016-04-20 8:19 ` Alexander Aring 2016-05-02 19:36 ` Hannes Frederic Sowa [not found] ` <fbd4c25c-2673-2848-c636-a5d21a6890d7-tFNcAqjVMyqKXQKiL6tip0B+6BGkLq7r@public.gmane.org> 2016-05-03 18:17 ` Stefan Schmidt 2016-05-03 18:17 ` Stefan Schmidt [not found] ` <5728EB3F.2060808-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org> 2016-05-06 9:36 ` Alexander Aring 2016-05-06 9:36 ` Alexander Aring [not found] ` <1461140382-4784-8-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-04 12:23 ` Stefan Schmidt 2016-05-04 12:23 ` Stefan Schmidt [not found] ` <5729E9AB.5000301-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org> 2016-05-06 9:47 ` Alexander Aring 2016-05-06 9:47 ` Alexander Aring 2016-05-06 10:19 ` Alexander Aring 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 09/10] 6lowpan: introduce 6lowpan-nd Alexander Aring 2016-04-20 8:19 ` Alexander Aring [not found] ` <1461140382-4784-10-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-04 12:23 ` Stefan Schmidt 2016-05-04 12:23 ` Stefan Schmidt 2016-05-02 17:25 ` [PATCHv2 bluetooth-next 00/10] 6lowpan: introduce basic 6lowpan-nd Marcel Holtmann 2016-05-02 17:25 ` Marcel Holtmann [not found] ` <D212A5BF-A414-403B-A409-1F8C2D279883-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org> 2016-05-02 19:52 ` Hannes Frederic Sowa 2016-05-02 19:52 ` Hannes Frederic Sowa [not found] ` <870fdf5f-82ed-b621-a8d5-625bf9d81d0d-tFNcAqjVMyqKXQKiL6tip0B+6BGkLq7r@public.gmane.org> 2016-05-02 23:17 ` Marcel Holtmann 2016-05-02 23:17 ` Marcel Holtmann [not found] ` <58926844-0338-4D63-A5B6-DB0EBE903A0E-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org> 2016-05-03 20:07 ` David Miller 2016-05-03 20:07 ` David Miller 2016-05-13 2:59 ` YOSHIFUJI Hideaki 2016-05-13 2:59 ` YOSHIFUJI Hideaki [not found] ` <57354315.2050509-GmhWrQMWH5w7YuNMryXyOw@public.gmane.org> 2016-05-13 12:33 ` Alexander Aring 2016-05-13 12:33 ` Alexander Aring 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 06/10] ndisc: add addr_len parameter to ndisc_fill_addr_option Alexander Aring 2016-05-03 18:17 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 08/10] ipv6: export ndisc functions Alexander Aring 2016-05-02 19:39 ` Hannes Frederic Sowa 2016-05-08 10:46 ` Alexander Aring [not found] ` <1461140382-4784-9-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-04 12:23 ` Stefan Schmidt 2016-05-04 12:23 ` Stefan Schmidt 2016-04-20 8:19 ` [PATCHv2 bluetooth-next 10/10] 6lowpan: add support for 802.15.4 short addr handling Alexander Aring [not found] ` <1461140382-4784-11-git-send-email-aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2016-05-04 12:23 ` Stefan Schmidt 2016-05-04 12:23 ` Stefan Schmidt 2016-04-28 11:36 ` [PATCHv2 bluetooth-next 00/10] 6lowpan: introduce basic 6lowpan-nd Alexander Aring
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=5728EB0A.5080108@osg.samsung.com \ --to=stefan-jph+aebz4p+uejcrhfaqsw@public.gmane.org \ --cc=aar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \ --cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org \ --cc=hannes-tFNcAqjVMyqKXQKiL6tip0B+6BGkLq7r@public.gmane.org \ --cc=jmorris-gx6/JNMH7DfYtjvyW6yDsg@public.gmane.org \ --cc=jukka.rissanen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \ --cc=kaber-dcUjhNyLwpNeoWH0uzbU5w@public.gmane.org \ --cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \ --cc=kuznet-v/Mj1YrvjDBInbfyfbPRSQ@public.gmane.org \ --cc=linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-wpan-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org \ --cc=mcr-SWp7JaYWvAQV+D8aMU/kSg@public.gmane.org \ --cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=werner-SEdMjqphH88wryQfseakQg@public.gmane.org \ --cc=yoshfuji-VfPWfsRibaP+Ru+s062T9g@public.gmane.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.