[PATCH] Re: Bringing down ethernet
Jitendra Vegiraju
jvegiraju at netscape.net
Fri Mar 28 20:54:38 UTC 2003
I have dealt with the same requirement in a different way.
Why not fix the rtems_bsdnet_ifconfig() function itself.
In the code that handles SIOCSIFFLAGS, add the following lines.
if ( (*((short*) param) & IFF_UP ) == 0 ) {
/* set the interface down */
ifreq.ifr_flags &= ~(IFF_UP);
}
r = ioctl (s, SIOCSIFFLAGS, &ifreq);
Joel, please apply the patch if it is acceptable to networking code
maintainers.
The patch is against rtems-ss-20030128.
Thanks,
-Jitendra
Charles Steaderman wrote:
> Is there a simple function for bringing down and ethernet port? I
> tried using something like:
>
> short flags = ~IFF_UP;
> rtems_bsdnet_ifconfig ("eth0", SIOCGIFFLAGS, &flags);
>
> but when I traced throught the rtems_bsdnet_ifconfig source it appears
> that you can only ADD flags, but never DELETE them. Is this correct? I
> ended up copying a source snippet from rtems_bsdnet_ifconfig which
> looks as follows:
>
> int ifDown(const char* sIfName)
> {
> int status = 0;
> int s, r = 0;
> struct ifreq ifreq;
>
> s = socket (AF_INET, SOCK_DGRAM, 0);
> if (s < 0)
> return(-1);
>
> strncpy (ifreq.ifr_name, sIfName, IFNAMSIZ);
>
> rtems_bsdnet_semaphore_obtain ();
>
> if ((r = ioctl (s, SIOCGIFFLAGS, &ifreq)) < 0)
> status = -1;
>
> if(status == 0)
> {
> ifreq.ifr_flags &= ~IFF_UP;
> r = ioctl (s, SIOCSIFFLAGS, &ifreq);
> }
>
> rtems_bsdnet_semaphore_release ();
>
> close (s);
> return status;
> }
>
> but I didn't like having to expose myself to such low level code. Any
> comments would be appreciated.
>
> - Charlie
>
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ifdown-fix.diff
URL: <http://lists.rtems.org/pipermail/users/attachments/20030328/91c22fdc/attachment-0001.ksh>
More information about the users
mailing list