[Xenomai-git] Gilles Chanteperdrix : rtnet/ioctl: allow checking link state
Module: xenomai-3 Branch: stable-3.0.x Commit: ba315472fef528ce82cf2bfe852c99092f0046c7 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=ba315472fef528ce82cf2bfe852c99092f0046c7 Author: Gilles ChanteperdrixDate: Sat Oct 10 19:37:50 2015 +0200 rtnet/ioctl: allow checking link state Use the IFF_RUNNING bit in the flags returned by the SIOCGIFFLAGS ioctl, like Linux SIOCGIFFLAGS ioctl. --- kernel/drivers/net/stack/include/rtdev.h |4 kernel/drivers/net/stack/rtdev.c |2 +- kernel/drivers/net/stack/rtnet_chrdev.c |7 +++ kernel/drivers/net/stack/socket.c|8 +++- utils/net/rtifconfig.c |2 +- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kernel/drivers/net/stack/include/rtdev.h b/kernel/drivers/net/stack/include/rtdev.h index 67a8ffd..c1c0b4e 100644 --- a/kernel/drivers/net/stack/include/rtdev.h +++ b/kernel/drivers/net/stack/include/rtdev.h @@ -55,6 +55,10 @@ enum rtnet_link_state { __RTNET_LINK_STATE_PRESENT, __RTNET_LINK_STATE_NOCARRIER, }; +#define RTNET_LINK_STATE_XOFF (1 << __RTNET_LINK_STATE_XOFF) +#define RTNET_LINK_STATE_START (1 << __RTNET_LINK_STATE_START) +#define RTNET_LINK_STATE_PRESENT (1 << __RTNET_LINK_STATE_PRESENT) +#define RTNET_LINK_STATE_NOCARRIER (1 << __RTNET_LINK_STATE_NOCARRIER) /*** * rtnet_device diff --git a/kernel/drivers/net/stack/rtdev.c b/kernel/drivers/net/stack/rtdev.c index f7e1f41..5eb73ce 100644 --- a/kernel/drivers/net/stack/rtdev.c +++ b/kernel/drivers/net/stack/rtdev.c @@ -644,7 +644,7 @@ int rtdev_open(struct rtnet_device *rtdev) ret = rtdev->open(rtdev); if ( !ret ) { - rtdev->flags |= (IFF_UP | IFF_RUNNING); + rtdev->flags |= IFF_UP; set_bit(__RTNET_LINK_STATE_START, >link_state); } else rtdev_dereference(rtdev); diff --git a/kernel/drivers/net/stack/rtnet_chrdev.c b/kernel/drivers/net/stack/rtnet_chrdev.c index d3f617c..f06ff2a 100644 --- a/kernel/drivers/net/stack/rtnet_chrdev.c +++ b/kernel/drivers/net/stack/rtnet_chrdev.c @@ -210,6 +210,13 @@ static int rtnet_core_ioctl(struct rtnet_device *rtdev, unsigned int request, cmd.args.info.broadcast_ip = rtdev->broadcast_ip; cmd.args.info.mtu = rtdev->mtu; cmd.args.info.flags= rtdev->flags; +if ((cmd.args.info.flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +cmd.args.info.flags |= IFF_RUNNING; + memcpy(cmd.args.info.dev_addr, rtdev->dev_addr, MAX_ADDR_LEN); mutex_unlock(>nrt_lock); diff --git a/kernel/drivers/net/stack/socket.c b/kernel/drivers/net/stack/socket.c index 64a2a2e..7dacb25 100644 --- a/kernel/drivers/net/stack/socket.c +++ b/kernel/drivers/net/stack/socket.c @@ -242,7 +242,7 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) for (i = 1; i <= MAX_RT_DEVICES; i++) { rtdev = rtdev_get_by_index(i); if (rtdev != NULL) { - if ((rtdev->flags & IFF_RUNNING) == 0) { + if ((rtdev->flags & IFF_UP) == 0) { rtdev_dereference(rtdev); continue; } @@ -288,6 +288,12 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) case SIOCGIFFLAGS: ifr->ifr_flags = rtdev->flags; +if ((ifr->ifr_flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +ifr->ifr_flags |= IFF_RUNNING; break; case SIOCGIFHWADDR: diff --git a/utils/net/rtifconfig.c b/utils/net/rtifconfig.c index 2024afe..8117e12 100644 --- a/utils/net/rtifconfig.c +++ b/utils/net/rtifconfig.c @@ -290,7 +290,7 @@ void do_display(int print_flags) ret = ioctl(f, IOC_RT_IFINFO, ); if (ret == 0) { if (((print_flags & PRINT_FLAG_INACTIVE) != 0) || -((cmd.args.info.flags & IFF_RUNNING) != 0)) +((cmd.args.info.flags & IFF_UP) != 0)) print_dev(); } else if (errno != ENODEV) { perror("ioctl"); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Gilles Chanteperdrix : rtnet/ioctl: allow checking link state
Module: xenomai-3 Branch: next Commit: a73161a18c90440b6ee4125e09526616dcff506a URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a73161a18c90440b6ee4125e09526616dcff506a Author: Gilles ChanteperdrixDate: Sat Oct 10 19:37:50 2015 +0200 rtnet/ioctl: allow checking link state Use the IFF_RUNNING bit in the flags returned by the SIOCGIFFLAGS ioctl, like Linux SIOCGIFFLAGS ioctl. --- kernel/drivers/net/stack/include/rtdev.h |4 kernel/drivers/net/stack/rtdev.c |2 +- kernel/drivers/net/stack/rtnet_chrdev.c |7 +++ kernel/drivers/net/stack/socket.c|8 +++- utils/net/rtifconfig.c |2 +- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kernel/drivers/net/stack/include/rtdev.h b/kernel/drivers/net/stack/include/rtdev.h index 67a8ffd..c1c0b4e 100644 --- a/kernel/drivers/net/stack/include/rtdev.h +++ b/kernel/drivers/net/stack/include/rtdev.h @@ -55,6 +55,10 @@ enum rtnet_link_state { __RTNET_LINK_STATE_PRESENT, __RTNET_LINK_STATE_NOCARRIER, }; +#define RTNET_LINK_STATE_XOFF (1 << __RTNET_LINK_STATE_XOFF) +#define RTNET_LINK_STATE_START (1 << __RTNET_LINK_STATE_START) +#define RTNET_LINK_STATE_PRESENT (1 << __RTNET_LINK_STATE_PRESENT) +#define RTNET_LINK_STATE_NOCARRIER (1 << __RTNET_LINK_STATE_NOCARRIER) /*** * rtnet_device diff --git a/kernel/drivers/net/stack/rtdev.c b/kernel/drivers/net/stack/rtdev.c index f7e1f41..5eb73ce 100644 --- a/kernel/drivers/net/stack/rtdev.c +++ b/kernel/drivers/net/stack/rtdev.c @@ -644,7 +644,7 @@ int rtdev_open(struct rtnet_device *rtdev) ret = rtdev->open(rtdev); if ( !ret ) { - rtdev->flags |= (IFF_UP | IFF_RUNNING); + rtdev->flags |= IFF_UP; set_bit(__RTNET_LINK_STATE_START, >link_state); } else rtdev_dereference(rtdev); diff --git a/kernel/drivers/net/stack/rtnet_chrdev.c b/kernel/drivers/net/stack/rtnet_chrdev.c index d3f617c..f06ff2a 100644 --- a/kernel/drivers/net/stack/rtnet_chrdev.c +++ b/kernel/drivers/net/stack/rtnet_chrdev.c @@ -210,6 +210,13 @@ static int rtnet_core_ioctl(struct rtnet_device *rtdev, unsigned int request, cmd.args.info.broadcast_ip = rtdev->broadcast_ip; cmd.args.info.mtu = rtdev->mtu; cmd.args.info.flags= rtdev->flags; +if ((cmd.args.info.flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +cmd.args.info.flags |= IFF_RUNNING; + memcpy(cmd.args.info.dev_addr, rtdev->dev_addr, MAX_ADDR_LEN); mutex_unlock(>nrt_lock); diff --git a/kernel/drivers/net/stack/socket.c b/kernel/drivers/net/stack/socket.c index 64a2a2e..7dacb25 100644 --- a/kernel/drivers/net/stack/socket.c +++ b/kernel/drivers/net/stack/socket.c @@ -242,7 +242,7 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) for (i = 1; i <= MAX_RT_DEVICES; i++) { rtdev = rtdev_get_by_index(i); if (rtdev != NULL) { - if ((rtdev->flags & IFF_RUNNING) == 0) { + if ((rtdev->flags & IFF_UP) == 0) { rtdev_dereference(rtdev); continue; } @@ -288,6 +288,12 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) case SIOCGIFFLAGS: ifr->ifr_flags = rtdev->flags; +if ((ifr->ifr_flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +ifr->ifr_flags |= IFF_RUNNING; break; case SIOCGIFHWADDR: diff --git a/utils/net/rtifconfig.c b/utils/net/rtifconfig.c index 2024afe..8117e12 100644 --- a/utils/net/rtifconfig.c +++ b/utils/net/rtifconfig.c @@ -290,7 +290,7 @@ void do_display(int print_flags) ret = ioctl(f, IOC_RT_IFINFO, ); if (ret == 0) { if (((print_flags & PRINT_FLAG_INACTIVE) != 0) || -((cmd.args.info.flags & IFF_RUNNING) != 0)) +((cmd.args.info.flags & IFF_UP) != 0)) print_dev(); } else if (errno != ENODEV) { perror("ioctl"); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Gilles Chanteperdrix : rtnet/ioctl: allow checking link state
Module: xenomai-gch Branch: for-3.0.x Commit: ba315472fef528ce82cf2bfe852c99092f0046c7 URL: http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=ba315472fef528ce82cf2bfe852c99092f0046c7 Author: Gilles ChanteperdrixDate: Sat Oct 10 19:37:50 2015 +0200 rtnet/ioctl: allow checking link state Use the IFF_RUNNING bit in the flags returned by the SIOCGIFFLAGS ioctl, like Linux SIOCGIFFLAGS ioctl. --- kernel/drivers/net/stack/include/rtdev.h |4 kernel/drivers/net/stack/rtdev.c |2 +- kernel/drivers/net/stack/rtnet_chrdev.c |7 +++ kernel/drivers/net/stack/socket.c|8 +++- utils/net/rtifconfig.c |2 +- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kernel/drivers/net/stack/include/rtdev.h b/kernel/drivers/net/stack/include/rtdev.h index 67a8ffd..c1c0b4e 100644 --- a/kernel/drivers/net/stack/include/rtdev.h +++ b/kernel/drivers/net/stack/include/rtdev.h @@ -55,6 +55,10 @@ enum rtnet_link_state { __RTNET_LINK_STATE_PRESENT, __RTNET_LINK_STATE_NOCARRIER, }; +#define RTNET_LINK_STATE_XOFF (1 << __RTNET_LINK_STATE_XOFF) +#define RTNET_LINK_STATE_START (1 << __RTNET_LINK_STATE_START) +#define RTNET_LINK_STATE_PRESENT (1 << __RTNET_LINK_STATE_PRESENT) +#define RTNET_LINK_STATE_NOCARRIER (1 << __RTNET_LINK_STATE_NOCARRIER) /*** * rtnet_device diff --git a/kernel/drivers/net/stack/rtdev.c b/kernel/drivers/net/stack/rtdev.c index f7e1f41..5eb73ce 100644 --- a/kernel/drivers/net/stack/rtdev.c +++ b/kernel/drivers/net/stack/rtdev.c @@ -644,7 +644,7 @@ int rtdev_open(struct rtnet_device *rtdev) ret = rtdev->open(rtdev); if ( !ret ) { - rtdev->flags |= (IFF_UP | IFF_RUNNING); + rtdev->flags |= IFF_UP; set_bit(__RTNET_LINK_STATE_START, >link_state); } else rtdev_dereference(rtdev); diff --git a/kernel/drivers/net/stack/rtnet_chrdev.c b/kernel/drivers/net/stack/rtnet_chrdev.c index d3f617c..f06ff2a 100644 --- a/kernel/drivers/net/stack/rtnet_chrdev.c +++ b/kernel/drivers/net/stack/rtnet_chrdev.c @@ -210,6 +210,13 @@ static int rtnet_core_ioctl(struct rtnet_device *rtdev, unsigned int request, cmd.args.info.broadcast_ip = rtdev->broadcast_ip; cmd.args.info.mtu = rtdev->mtu; cmd.args.info.flags= rtdev->flags; +if ((cmd.args.info.flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +cmd.args.info.flags |= IFF_RUNNING; + memcpy(cmd.args.info.dev_addr, rtdev->dev_addr, MAX_ADDR_LEN); mutex_unlock(>nrt_lock); diff --git a/kernel/drivers/net/stack/socket.c b/kernel/drivers/net/stack/socket.c index 64a2a2e..7dacb25 100644 --- a/kernel/drivers/net/stack/socket.c +++ b/kernel/drivers/net/stack/socket.c @@ -242,7 +242,7 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) for (i = 1; i <= MAX_RT_DEVICES; i++) { rtdev = rtdev_get_by_index(i); if (rtdev != NULL) { - if ((rtdev->flags & IFF_RUNNING) == 0) { + if ((rtdev->flags & IFF_UP) == 0) { rtdev_dereference(rtdev); continue; } @@ -288,6 +288,12 @@ int rt_socket_if_ioctl(struct rtdm_fd *fd, int request, void *arg) case SIOCGIFFLAGS: ifr->ifr_flags = rtdev->flags; +if ((ifr->ifr_flags & IFF_UP) + && (rtdev->link_state + & (RTNET_LINK_STATE_PRESENT + | RTNET_LINK_STATE_NOCARRIER)) +== RTNET_LINK_STATE_PRESENT) +ifr->ifr_flags |= IFF_RUNNING; break; case SIOCGIFHWADDR: diff --git a/utils/net/rtifconfig.c b/utils/net/rtifconfig.c index 2024afe..8117e12 100644 --- a/utils/net/rtifconfig.c +++ b/utils/net/rtifconfig.c @@ -290,7 +290,7 @@ void do_display(int print_flags) ret = ioctl(f, IOC_RT_IFINFO, ); if (ret == 0) { if (((print_flags & PRINT_FLAG_INACTIVE) != 0) || -((cmd.args.info.flags & IFF_RUNNING) != 0)) +((cmd.args.info.flags & IFF_UP) != 0)) print_dev(); } else if (errno != ENODEV) { perror("ioctl"); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git