mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
socket: SIOCGIFINDEX
This commit is contained in:
@@ -137,6 +137,10 @@ static int handle_ifreq(unsigned long request, ifreq_t *uifreq, cred_t *cred) {
|
|||||||
int mtu = netdev->mtu;
|
int mtu = netdev->mtu;
|
||||||
return USERCOPY_POSSIBLY_TO_USER(&uifreq->mtu, &mtu, sizeof(mtu));
|
return USERCOPY_POSSIBLY_TO_USER(&uifreq->mtu, &mtu, sizeof(mtu));
|
||||||
}
|
}
|
||||||
|
case SIOCGIFINDEX: {
|
||||||
|
int ifindex = netdev->ifindex;
|
||||||
|
return USERCOPY_POSSIBLY_TO_USER(&uifreq->ifindex, &ifindex, sizeof(ifindex));
|
||||||
|
}
|
||||||
case SIOCGIFFLAGS: {
|
case SIOCGIFFLAGS: {
|
||||||
short flags = netdev->flags;
|
short flags = netdev->flags;
|
||||||
return USERCOPY_POSSIBLY_TO_USER(&uifreq->flags, &flags, sizeof(flags));
|
return USERCOPY_POSSIBLY_TO_USER(&uifreq->flags, &flags, sizeof(flags));
|
||||||
@@ -152,6 +156,7 @@ int sockfs_ioctl(vnode_t *node, unsigned long request, void *arg, int *result, c
|
|||||||
case SIOCSIFADDR:
|
case SIOCSIFADDR:
|
||||||
case SIOCGIFHWADDR:
|
case SIOCGIFHWADDR:
|
||||||
case SIOCGIFMTU:
|
case SIOCGIFMTU:
|
||||||
|
case SIOCGIFINDEX:
|
||||||
case SIOCGIFFLAGS:
|
case SIOCGIFFLAGS:
|
||||||
return handle_ifreq(request, arg, cred);
|
return handle_ifreq(request, arg, cred);
|
||||||
case SIOCADDRT: {
|
case SIOCADDRT: {
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ typedef struct {
|
|||||||
#define SIOCSIFADDR 0x8916
|
#define SIOCSIFADDR 0x8916
|
||||||
#define SIOCGIFMTU 0x8921
|
#define SIOCGIFMTU 0x8921
|
||||||
#define SIOCGIFHWADDR 0x8927
|
#define SIOCGIFHWADDR 0x8927
|
||||||
|
#define SIOCGIFINDEX 0x8933
|
||||||
#define SIOCADDRT 0x890b
|
#define SIOCADDRT 0x890b
|
||||||
#define FIONREAD 0x541B
|
#define FIONREAD 0x541B
|
||||||
#define FIONBIO 0x5421
|
#define FIONBIO 0x5421
|
||||||
@@ -193,6 +194,7 @@ typedef struct {
|
|||||||
union {
|
union {
|
||||||
abisockaddr_t addr;
|
abisockaddr_t addr;
|
||||||
int mtu;
|
int mtu;
|
||||||
|
int ifindex;
|
||||||
short flags;
|
short flags;
|
||||||
};
|
};
|
||||||
} ifreq_t;
|
} ifreq_t;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct netdev_t {
|
typedef struct netdev_t {
|
||||||
mac_t mac;
|
mac_t mac;
|
||||||
|
int ifindex;
|
||||||
size_t mtu;
|
size_t mtu;
|
||||||
uint32_t ip;
|
uint32_t ip;
|
||||||
int ipcurrid; // XXX This is defined as something per peer. However, having only one of these *should* work for most cases
|
int ipcurrid; // XXX This is defined as something per peer. However, having only one of these *should* work for most cases
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ int netdev_register(netdev_t *netdev, char *name) {
|
|||||||
hashtable_remove(&nametable, name, strlen(name));
|
hashtable_remove(&nametable, name, strlen(name));
|
||||||
|
|
||||||
minors[minor] = netdev;
|
minors[minor] = netdev;
|
||||||
|
netdev->ifindex = minor + 1;
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
MUTEX_RELEASE(&tablelock);
|
MUTEX_RELEASE(&tablelock);
|
||||||
|
|||||||
Reference in New Issue
Block a user