diff options
author | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-04-19 18:05:41 +0200 |
---|---|---|
committer | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-04-19 18:05:41 +0200 |
commit | 9247a4c0998de14ef5993822cac75b4a6327ee1e (patch) | |
tree | 50ebb7e1db657a70b6309265661fb5cf6dfd49ff /Semestr 4/sieci/pracownia2/router/network_addr.c | |
parent | bf9914308497839c1d05905f6f156ee4165fdae1 (diff) |
Router working finally
Diffstat (limited to 'Semestr 4/sieci/pracownia2/router/network_addr.c')
-rw-r--r-- | Semestr 4/sieci/pracownia2/router/network_addr.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/Semestr 4/sieci/pracownia2/router/network_addr.c b/Semestr 4/sieci/pracownia2/router/network_addr.c index a65f48c..d1982c2 100644 --- a/Semestr 4/sieci/pracownia2/router/network_addr.c +++ b/Semestr 4/sieci/pracownia2/router/network_addr.c @@ -5,21 +5,31 @@ struct in_addr _get_broadcast_address(struct in_addr addr, uint16_t netmask) { struct in_addr result = addr; + result.s_addr = ntohl(result.s_addr); /* bitshift by more than 31 is UB */ - if (netmask < 32) { - result.s_addr |= ~((1<<netmask) - 1); + if (netmask == 0) { + result.s_addr = -1; + } + else { + result.s_addr |= ((1 << (32 - netmask)) - 1); } + result.s_addr = htonl(result.s_addr); + return result; } struct in_addr _get_network_address(struct in_addr addr, uint16_t netmask) { struct in_addr result = addr; + result.s_addr = ntohl(result.s_addr); + if (netmask == 0) { - addr.s_addr = 0; + result.s_addr = 0; } else { result.s_addr &= ~((1 << (32 - netmask)) - 1); } + result.s_addr = htonl(result.s_addr); + return result; } @@ -31,13 +41,13 @@ struct in_addr get_network_address(struct network_addr na) { return _get_network_address(na.addr, na.netmask); } -void pretty_print(struct network_addr na) { +void pretty_print_network(struct network_addr na) { char ip_addr[20]; inet_ntop(AF_INET, &na.addr, ip_addr, sizeof(ip_addr)); - printf("%s/%d distance %d\n", ip_addr, na.netmask, na.distance); + printf("%s/%d\n", ip_addr, na.netmask); } -struct network_addr stora(char *str) { +struct network_addr stona(char *str) { struct network_addr result; char addr[20]; size_t ip_preffix = strcspn(str, "/"); |