Changeset View
Changeset View
Standalone View
Standalone View
sbin/ifconfig/af_inet.c
Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
#include <netinet/in_var.h> | #include <netinet/in_var.h> | ||||
#include <arpa/inet.h> | #include <arpa/inet.h> | ||||
#include <netdb.h> | #include <netdb.h> | ||||
#include "ifconfig.h" | #include "ifconfig.h" | ||||
static struct in_aliasreq in_addreq; | static struct in_aliasreq in_addreq; | ||||
static struct ifreq in_ridreq; | static struct ifreq in_ridreq; | ||||
extern char *f_subnet; | |||||
static void | static void | ||||
in_status(int s __unused, const struct ifaddrs *ifa) | in_status(int s __unused, const struct ifaddrs *ifa) | ||||
{ | { | ||||
struct sockaddr_in *sin, null_sin; | struct sockaddr_in *sin, null_sin; | ||||
memset(&null_sin, 0, sizeof(null_sin)); | memset(&null_sin, 0, sizeof(null_sin)); | ||||
sin = (struct sockaddr_in *)ifa->ifa_addr; | sin = (struct sockaddr_in *)ifa->ifa_addr; | ||||
if (sin == NULL) | if (sin == NULL) | ||||
return; | return; | ||||
printf("\tinet %s ", inet_ntoa(sin->sin_addr)); | printf("\tinet %s", inet_ntoa(sin->sin_addr)); | ||||
if (ifa->ifa_flags & IFF_POINTOPOINT) { | if (ifa->ifa_flags & IFF_POINTOPOINT) { | ||||
sin = (struct sockaddr_in *)ifa->ifa_dstaddr; | sin = (struct sockaddr_in *)ifa->ifa_dstaddr; | ||||
if (sin == NULL) | if (sin == NULL) | ||||
sin = &null_sin; | sin = &null_sin; | ||||
printf("--> %s ", inet_ntoa(sin->sin_addr)); | printf(" --> %s ", inet_ntoa(sin->sin_addr)); | ||||
} | } | ||||
sin = (struct sockaddr_in *)ifa->ifa_netmask; | sin = (struct sockaddr_in *)ifa->ifa_netmask; | ||||
if (sin == NULL) | if (sin == NULL) | ||||
sin = &null_sin; | sin = &null_sin; | ||||
if (f_subnet != NULL && strcmp(f_subnet, "cidr") == 0) { | |||||
int cidr = 32; | |||||
unsigned long smask; | |||||
smask = ntohl(sin->sin_addr.s_addr); | |||||
while ((smask & 1) == 0) { | |||||
smask = smask >> 1; | |||||
cidr--; | |||||
if (cidr == 0) | |||||
break; | |||||
} | |||||
printf("/%d ", cidr); | |||||
} else if (f_subnet != NULL && strcmp(f_subnet, "dotted") == 0) | |||||
printf(" netmask %s ", inet_ntoa(sin->sin_addr)); | |||||
else | |||||
printf("netmask 0x%lx ", (unsigned long)ntohl(sin->sin_addr.s_addr)); | printf(" netmask 0x%lx ", (unsigned long)ntohl(sin->sin_addr.s_addr)); | ||||
if (ifa->ifa_flags & IFF_BROADCAST) { | if (ifa->ifa_flags & IFF_BROADCAST) { | ||||
sin = (struct sockaddr_in *)ifa->ifa_broadaddr; | sin = (struct sockaddr_in *)ifa->ifa_broadaddr; | ||||
if (sin != NULL && sin->sin_addr.s_addr != 0) | if (sin != NULL && sin->sin_addr.s_addr != 0) | ||||
printf("broadcast %s ", inet_ntoa(sin->sin_addr)); | printf("broadcast %s ", inet_ntoa(sin->sin_addr)); | ||||
} | } | ||||
print_vhid(ifa, " "); | print_vhid(ifa, " "); | ||||
▲ Show 20 Lines • Show All 120 Lines • Show Last 20 Lines |