netof.c revision 285612
1206084Srdivacky/* 2206084Srdivacky * netof - return the net address part of an ip address in a sockaddr_storage structure 3206084Srdivacky * (zero out host part) 4206084Srdivacky */ 5206084Srdivacky#include <config.h> 6206084Srdivacky#include <stdio.h> 7206084Srdivacky#include <syslog.h> 8206084Srdivacky 9206084Srdivacky#include "ntp_fp.h" 10206084Srdivacky#include "ntp_net.h" 11206084Srdivacky#include "ntp_stdlib.h" 12206084Srdivacky#include "ntp.h" 13206084Srdivacky 14206084Srdivackysockaddr_u * 15206084Srdivackynetof( 16206084Srdivacky sockaddr_u *hostaddr 17206084Srdivacky ) 18206084Srdivacky{ 19206084Srdivacky static sockaddr_u netofbuf[8]; 20206084Srdivacky static int next_netofbuf; 21206084Srdivacky u_int32 netnum; 22206084Srdivacky sockaddr_u * netaddr; 23204793Srdivacky 24204793Srdivacky netaddr = &netofbuf[next_netofbuf]; 25204793Srdivacky next_netofbuf = (next_netofbuf + 1) % COUNTOF(netofbuf); 26204793Srdivacky 27204793Srdivacky memcpy(netaddr, hostaddr, sizeof(*netaddr)); 28204793Srdivacky 29204793Srdivacky if (IS_IPV4(netaddr)) { 30204793Srdivacky netnum = SRCADR(netaddr); 31204793Srdivacky 32204793Srdivacky /* 33204793Srdivacky * We live in a modern CIDR world where the basement nets, which 34204793Srdivacky * used to be class A, are now probably associated with each 35204793Srdivacky * host address. So, for class-A nets, all bits are significant. 36204793Srdivacky */ 37204793Srdivacky if (IN_CLASSC(netnum)) 38204793Srdivacky netnum &= IN_CLASSC_NET; 39204793Srdivacky else if (IN_CLASSB(netnum)) 40204793Srdivacky netnum &= IN_CLASSB_NET; 41204793Srdivacky 42204793Srdivacky SET_ADDR4(netaddr, netnum); 43204793Srdivacky 44204793Srdivacky } else if (IS_IPV6(netaddr)) 45204793Srdivacky /* assume the typical /64 subnet size */ 46204793Srdivacky zero_mem(&NSRCADR6(netaddr)[8], 8); 47204793Srdivacky#ifdef DEBUG 48204962Srdivacky else { 49204793Srdivacky msyslog(LOG_ERR, "netof unknown AF %d", AF(netaddr)); 50204793Srdivacky exit(1); 51204793Srdivacky } 52204793Srdivacky#endif 53204793Srdivacky 54204793Srdivacky return netaddr; 55204793Srdivacky} 56204793Srdivacky