tools: netinfo

This commit is contained in:
Matheus
2026-04-01 16:47:11 -03:00
parent a48edb99be
commit c46634fb07
5 changed files with 71 additions and 0 deletions
+2
View File
@@ -32,6 +32,8 @@ tools/prof/astral-prof
tools/prof/main.o
tools/systrace/systrace
tools/systrace/main.o
tools/netinfo/main.o
tools/netinfo/netinfo
initrds
hdd.img
netdump.dat
+14
View File
@@ -0,0 +1,14 @@
name=netinfo
revision=1
from_source=netinfo
imagedeps="build-essential"
hostdeps="xbinutils xgcc"
deps="base"
build() {
make -C ${source_dir} -j ${parallelism}
}
package() {
make -C ${source_dir} install PREFIX=${prefix} DESTDIR=${dest_dir}
}
+3
View File
@@ -0,0 +1,3 @@
name=netinfo
version=0
source_dir="tools/netinfo"
+14
View File
@@ -0,0 +1,14 @@
.phony: all install
CC=x86_64-astral-gcc
LD=x86_64-astral-gcc
all: netinfo
install:
mkdir -p "$(DESTDIR)/$(PREFIX)/sbin/"
cp netinfo "$(DESTDIR)/$(PREFIX)/sbin/netinfo"
netinfo: main.o
$(LD) $(LDFLAGS) -g -o $@ $^
main.o: main.c
$(CC) -c $(CFLAGS) -g -o $@ $<
+38
View File
@@ -0,0 +1,38 @@
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>
static void print_error(const char *msg, const int error) {
fprintf(stderr, "%s: %s: %s\n", program_invocation_short_name, msg, strerror(error));
}
int main(const int argc, const char *argv[]) {
struct ifaddrs *ifaddrs;
if (getifaddrs(&ifaddrs)) {
print_error("getifaddrs", errno);
return EXIT_FAILURE;
}
for (struct ifaddrs *ifaddr = ifaddrs; ifaddr; ifaddr = ifaddr->ifa_next) {
if (ifaddr->ifa_addr->sa_family != AF_INET)
continue;
printf("%s: flags: 0x%x%s%s%s\n",
ifaddr->ifa_name, ifaddr->ifa_flags,
ifaddr->ifa_flags & IFF_UP ? " UP" : "",
ifaddr->ifa_flags & IFF_LOOPBACK ? " LOOPBACK" : "",
ifaddr->ifa_flags & IFF_RUNNING ? " RUNNING" : "");
printf("%s: address: %s\n", ifaddr->ifa_name, ifaddr->ifa_addr ? inet_ntoa(((struct sockaddr_in *)ifaddr->ifa_addr)->sin_addr) : "?");
printf("%s: mask: %s\n", ifaddr->ifa_name, ifaddr->ifa_netmask ? inet_ntoa(((struct sockaddr_in *)ifaddr->ifa_netmask)->sin_addr) : "?");
printf("%s: broadcast: %s\n", ifaddr->ifa_name, ifaddr->ifa_broadaddr ? inet_ntoa(((struct sockaddr_in *)ifaddr->ifa_broadaddr)->sin_addr) : "?");
}
freeifaddrs(ifaddrs);
return EXIT_SUCCESS;
}