[+] AuNet::ENetworkAdapterType

[+] AuNet::ENetworkAdapterStatus
[+] INetAdapter::ToNetworkType()
[+] INetAdapter::ToStatus()
This commit is contained in:
Reece Wilson 2023-12-01 12:11:54 +00:00
parent 507f418b81
commit cbcd55ce8e
5 changed files with 87 additions and 1 deletions

View File

@ -9,6 +9,9 @@
namespace Aurora::IO::Net
{
AUE_DEFINE_VA(ENetworkAdapterStatus, eUp, eDown);
AUE_DEFINE_VA(ENetworkAdapterType, eUnknown, eOther, eIPGRE, eTunnel, eLoopback, eEthernet, eIEEE80211, eMobileNetwork, eTokenRing);
struct INetAdapter
{
virtual const AuString &ToName() = 0;
@ -16,6 +19,9 @@ namespace Aurora::IO::Net
virtual AuUInt16 GetIndex() = 0;
virtual ENetworkAdapterType ToNetworkType() = 0;
virtual ENetworkAdapterStatus ToStatus() = 0;
virtual EIPProtocol ToFamily() = 0;
virtual IPAddress ToAddress() = 0;

View File

@ -8,10 +8,10 @@
#include "Networking.hpp"
#include "AuNetAdapter.hpp"
#include "AuNetEndpoint.hpp"
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <linux/if_arp.h>
#include <sys/socket.h>
namespace Aurora::IO::Net
@ -439,6 +439,43 @@ namespace Aurora::IO::Net
continue;
}
adapter.eNetworkStatus = ifa->ifi_flags & IFF_RUNNING ?
ENetworkAdapterStatus::eUp :
ENetworkAdapterStatus::eDown;
{
switch (ifa->ifi_type)
{
case ARPHRD_ETHER:
case ARPHRD_EETHER:
adapter.eNetworkType = ENetworkAdapterType::eEthernet;
break;
case ARPHRD_IEEE802:
case ARPHRD_IEEE802_TR:
case ARPHRD_IEEE80211:
case ARPHRD_IEEE80211_PRISM:
case ARPHRD_IEEE80211_RADIOTAP:
case ARPHRD_IEEE802154:
case ARPHRD_IEEE802154_MONITOR:
define
adapter.eNetworkType = ENetworkAdapterType::eIEEE80211;
break;
case ARPHRD_PRONET:
adapter.eNetworkType = ENetworkAdapterType::eTokenRing;
break;
case ARPHRD_LOOPBACK:
adapter.eNetworkType = ENetworkAdapterType::eLoopback;
break;
case ARPHRD_TUNNEL:
case ARPHRD_TUNNEL6:
adapter.eNetworkType = ENetworkAdapterType::eTunnel;
break;
case ARPHRD_IPGRE:
adapter.eNetworkType = ENetworkAdapterType::eIPGRE;
break;
}
}
auto attr = IFLA_RTA(ifa);
auto attrlen = hdr->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa));

View File

@ -178,6 +178,34 @@ namespace Aurora::IO::Net
adapter.broadcast = ep.ip;
}
{
switch (pCurrAddresses->IfType)
{
case IF_TYPE_OTHER:
adapter.eNetworkType = ENetworkAdapterType::eOther;
break;
case IF_TYPE_ETHERNET_CSMACD:
adapter.eNetworkType = ENetworkAdapterType::eEthernet;
break;
case IF_TYPE_IEEE80211:
adapter.eNetworkType = ENetworkAdapterType::eIEEE80211;
break;
case IF_TYPE_ISO88025_TOKENRING:
adapter.eNetworkType = ENetworkAdapterType::eTokenRing;
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
adapter.eNetworkType = ENetworkAdapterType::eLoopback;
break;
case IF_TYPE_TUNNEL:
adapter.eNetworkType = ENetworkAdapterType::eTunnel;
break;
}
}
adapter.eNetworkStatus = pCurrAddresses->OperStatus == IfOperStatusUp ?
ENetworkAdapterStatus::eUp :
ENetworkAdapterStatus::eDown;
auto pAnycast = pCurrAddresses->FirstAnycastAddress;
if (pAnycast)
{

View File

@ -38,6 +38,16 @@ namespace Aurora::IO::Net
return this->device;
}
ENetworkAdapterType NetAdapter::ToNetworkType()
{
return this->eNetworkType;
}
ENetworkAdapterStatus NetAdapter::ToStatus()
{
return this->eNetworkStatus;
}
EIPProtocol NetAdapter::ToFamily()
{
return this->address.ip;

View File

@ -18,6 +18,9 @@ namespace Aurora::IO::Net
EIPProtocol ToFamily() override;
ENetworkAdapterType ToNetworkType() override;
ENetworkAdapterStatus ToStatus() override;
IPAddress ToAddress() override;
IPAddress ToBroadcastAddress() override;
IPAddress ToAnycastAddress() override;
@ -46,6 +49,8 @@ namespace Aurora::IO::Net
IPAddress anycast;
IPAddress subnet;
IPAddress gateway;
ENetworkAdapterType eNetworkType { ENetworkAdapterType::eUnknown };
ENetworkAdapterStatus eNetworkStatus { ENetworkAdapterStatus::eUp };
bool dhcp {};
AuArray<AuUInt8, 8> mac;
AuUInt32 mtu;