From 5a97027c99163974a16614363dafc18a63b990e0 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 9 Aug 2008 14:35:27 +0000 Subject: 2008-07-29 Zheng Da Manuel Menal * include/device/net_status.h (NET_FLAGS): New macro. * linux/dev/glue/net.c (device_get_status): Handle NET_FLAGS case. (device_set_status): Likewise, calls dev_change_flags. * linux/dev/include/linux/netdevice.h (dev_change_flags): Declare function. * linux/dev/net/core/dev.c (dev_change_flags): Add function. --- linux/dev/glue/net.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'linux/dev/glue') diff --git a/linux/dev/glue/net.c b/linux/dev/glue/net.c index b76e098..20ce754 100644 --- a/linux/dev/glue/net.c +++ b/linux/dev/glue/net.c @@ -533,6 +533,17 @@ static io_return_t device_get_status (void *d, dev_flavor_t flavor, dev_status_t status, mach_msg_type_number_t *count) { + if (flavor == NET_FLAGS) + { + struct net_data *net = (struct net_data *) d; + + if (*count != sizeof(short)) + return D_INVALID_SIZE; + + *(short *) status = net->dev->flags; + return D_SUCCESS; + } + if(flavor >= SIOCIWFIRST && flavor <= SIOCIWLAST) { /* handle wireless ioctl */ @@ -592,6 +603,21 @@ static io_return_t device_set_status(void *d, dev_flavor_t flavor, dev_status_t status, mach_msg_type_number_t count) { + if (flavor == NET_FLAGS) + { + if (count != sizeof(short)) + return D_INVALID_SIZE; + + short flags = *(short *) status; + struct net_data *net = (struct net_data *) d; + + dev_change_flags (net->dev, flags); + + /* Change the flags of the Mach device, too. */ + net->ifnet.if_flags = net->dev->flags; + return D_SUCCESS; + } + if(flavor < SIOCIWFIRST || flavor > SIOCIWLAST) return D_INVALID_OPERATION; -- cgit v1.2.3