#include <errno.h> /* errno */
#include <arpa/inet.h> /* htonl */
#include <netinet/in.h> /* in_addr_t */
/**
* @param start start IP adress in host byte order
* @param end end IP address in host byte order
* @param addr_cb callback
* @param data callback argument.
* @return If failed, between_addr() returns -1. Otherwise, retrun a value from callback
*/
int between_addr(uint32_t start, uint32_t end, int (*addr_cb)(in_add_t, const void *), void *data)
{
int ret = -1;
uint32_t addr, limit;
if (!addr_cb) {
errno = EINVAL;
return ret;
}
addr = start < end ? start : end;
limit = start > end ? end : start;
for (; addr < limit; addr++) {
ret = addr_cb(htonl(addr), data);
if (!ret)
break;
}
return ret;
}
2015年4月20日 星期一
C/C++ snippet: between_addr()
2015年4月9日 星期四
C/C++ snippet: calc_network(), calc_broadcast()
計算網段
#include <netinet/in.h> /* in_addr_t */
in_addr_t calc_network(in_addr_t addr, in_addr_t netmask)
{
return addr & netmask;
}
計算 broadcast
#include <netinet/in.h> /* in_addr_t */
in_addr_t calc_broadcast(in_addr_t addr, in_addr_t netmask)
{
return addr | ~netmask;
}
訂閱:
文章 (Atom)