socket: SIOCGIFINDEX

This commit is contained in:
Matheus
2026-09-10 23:52:48 -03:00
parent 485cf616b2
commit 5aca46e22c
4 changed files with 9 additions and 0 deletions
+5
View File
@@ -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: {
+2
View File
@@ -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;
+1
View File
@@ -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
+1
View File
@@ -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);