mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:57:35 +00:00
Kernel: Add SIOCGIFHWADDR ioctl to get the MAC address of an adapter
This commit is contained in:
parent
345086ab72
commit
3f2c1a2e3d
4 changed files with 15 additions and 0 deletions
|
@ -377,6 +377,16 @@ int IPv4Socket::ioctl(FileDescription&, unsigned request, unsigned arg)
|
||||||
ifr->ifr_addr.sa_family = AF_INET;
|
ifr->ifr_addr.sa_family = AF_INET;
|
||||||
((sockaddr_in&)ifr->ifr_addr).sin_addr.s_addr = adapter->ipv4_address().to_u32();
|
((sockaddr_in&)ifr->ifr_addr).sin_addr.s_addr = adapter->ipv4_address().to_u32();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case SIOCGIFHWADDR:
|
||||||
|
if (!current->process().validate_write_typed(ifr))
|
||||||
|
return -EFAULT;
|
||||||
|
ifr->ifr_hwaddr.sa_family = AF_INET;
|
||||||
|
{
|
||||||
|
auto mac_address = adapter->mac_address();
|
||||||
|
memcpy(ifr->ifr_hwaddr.sa_data, &mac_address, sizeof(MACAddress));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -414,6 +414,7 @@ struct ifreq {
|
||||||
struct sockaddr ifru_addr;
|
struct sockaddr ifru_addr;
|
||||||
struct sockaddr ifru_dstaddr;
|
struct sockaddr ifru_dstaddr;
|
||||||
struct sockaddr ifru_broadaddr;
|
struct sockaddr ifru_broadaddr;
|
||||||
|
struct sockaddr ifru_hwaddr;
|
||||||
short ifru_flags;
|
short ifru_flags;
|
||||||
int ifru_metric;
|
int ifru_metric;
|
||||||
int64_t ifru_vnetid;
|
int64_t ifru_vnetid;
|
||||||
|
@ -435,4 +436,5 @@ struct ifreq {
|
||||||
#define ifr_data ifr_ifru.ifru_data // for use by interface
|
#define ifr_data ifr_ifru.ifru_data // for use by interface
|
||||||
#define ifr_index ifr_ifru.ifru_index // interface index
|
#define ifr_index ifr_ifru.ifru_index // interface index
|
||||||
#define ifr_llprio ifr_ifru.ifru_metric // link layer priority
|
#define ifr_llprio ifr_ifru.ifru_metric // link layer priority
|
||||||
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,7 @@ struct ifreq {
|
||||||
struct sockaddr ifru_addr;
|
struct sockaddr ifru_addr;
|
||||||
struct sockaddr ifru_dstaddr;
|
struct sockaddr ifru_dstaddr;
|
||||||
struct sockaddr ifru_broadaddr;
|
struct sockaddr ifru_broadaddr;
|
||||||
|
struct sockaddr ifru_hwaddr;
|
||||||
short ifru_flags;
|
short ifru_flags;
|
||||||
int ifru_metric;
|
int ifru_metric;
|
||||||
int64_t ifru_vnetid;
|
int64_t ifru_vnetid;
|
||||||
|
@ -33,6 +34,7 @@ struct ifreq {
|
||||||
#define ifr_data ifr_ifru.ifru_data // for use by interface
|
#define ifr_data ifr_ifru.ifru_data // for use by interface
|
||||||
#define ifr_index ifr_ifru.ifru_index // interface index
|
#define ifr_index ifr_ifru.ifru_index // interface index
|
||||||
#define ifr_llprio ifr_ifru.ifru_metric // link layer priority
|
#define ifr_llprio ifr_ifru.ifru_metric // link layer priority
|
||||||
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address
|
||||||
};
|
};
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
|
@ -35,4 +35,5 @@ enum IOCtlNumber {
|
||||||
FB_IOCTL_SET_BUFFER,
|
FB_IOCTL_SET_BUFFER,
|
||||||
SIOCSIFADDR,
|
SIOCSIFADDR,
|
||||||
SIOCGIFADDR,
|
SIOCGIFADDR,
|
||||||
|
SIOCGIFHWADDR,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue