Add two fields to the ifnet structure indicating what extra capabilities

a network device has, and which ones are enabled.
This commit is contained in:
Jonathan Lemon 2001-09-18 17:41:42 +00:00
parent 7429c0e49b
commit 016da741b2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=83624
3 changed files with 23 additions and 0 deletions

View File

@ -994,6 +994,11 @@ ifioctl(so, cmd, data, td)
ifr->ifr_flags = ifp->if_flags;
break;
case SIOCGIFCAP:
ifr->ifr_reqcap = ifp->if_capabilities;
ifr->ifr_curcap = ifp->if_capenable;
break;
case SIOCGIFMETRIC:
ifr->ifr_metric = ifp->if_metric;
break;
@ -1031,6 +1036,15 @@ ifioctl(so, cmd, data, td)
getmicrotime(&ifp->if_lastchange);
break;
case SIOCSIFCAP:
error = suser_td(td);
if (error)
return (error);
if (ifr->ifr_reqcap & ~ifp->if_capabilities)
return (EINVAL);
(void) (*ifp->if_ioctl)(ifp, cmd, data);
break;
case SIOCSIFMETRIC:
error = suser_td(td);
if (error)

View File

@ -136,6 +136,10 @@ struct if_data {
(IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI|IFF_SMART)
/* Capabilities that interfaces can advertise. */
#define IFCAP_HWCSUM 0x0001 /* can do hardware checksums */
#define IFCAP_NETCONS 0x0002 /* can be a network console */
#define IFQ_MAXLEN 50
#define IFNET_SLOWHZ 1 /* granularity is 1 second */
@ -198,6 +202,7 @@ struct ifreq {
int ifru_phys;
int ifru_media;
caddr_t ifru_data;
int ifru_cap[2];
} ifr_ifru;
#define ifr_addr ifr_ifru.ifru_addr /* address */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
@ -209,6 +214,8 @@ struct ifreq {
#define ifr_phys ifr_ifru.ifru_phys /* physical wire */
#define ifr_media ifr_ifru.ifru_media /* physical media */
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
#define ifr_reqcap ifr_ifru.ifru_cap[0] /* requested capabilities */
#define ifr_curcap ifr_ifru.ifru_cap[1] /* current capabilities */
};
#define _SIZEOF_ADDR_IFREQ(ifr) \

View File

@ -117,6 +117,8 @@ struct ifnet {
short if_unit; /* sub-unit for lower level driver */
short if_timer; /* time 'til if_watchdog called */
short if_flags; /* up/down, broadcast, etc. */
int if_capabilities; /* interface capabilities */
int if_capenable; /* enabled features */
int if_mpsafe; /* XXX TEMPORARY */
int if_ipending; /* interrupts pending */
void *if_linkmib; /* link-type-specific MIB data */