/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__XSTD_INETIFREQ_H
#define POLYGRAPH__XSTD_INETIFREQ_H
#include "xstd/InAddress.h"
class String;
class InetIfReq {
typedef char Name[IFNAMSIZ];
public:
InetIfReq() { theName[0] = (char)0; }
InetIfReq(const char *name, InAddress ina): sa(ina) {
strncpy(theName, name, IFNAMSIZ);
}
InetIfReq(const ifreq &ifr): sa(ifr.ifr_addr) {
strncpy(theName, ifr.ifr_name, IFNAMSIZ);
}
const Name &name() const { return theName; }
const InAddress &addrN() const { return sa; }
private:
char theName[IFNAMSIZ];
InAddress sa;
};
#if !defined(HAVE_TYPE_IFALIASREQ)
struct ifaliasreq {
char ifra_name[IFNAMSIZ]; // ifname, e.g. "en0"
sockaddr_in ifra_addr;
sockaddr_in ifra_broadaddr;
sockaddr_in ifra_mask;
};
#endif
class InetIfAliasReq: public ifaliasreq {
public:
typedef char Name[IFNAMSIZ];
public:
inline InetIfAliasReq(const String &name);
const Name &name() const { return ifra_name; }
const InAddress addr() const { return InAddress(ifra_addr); }
const InAddress broad() const { return InAddress(ifra_broadaddr); }
const InAddress mask() const { return InAddress(ifra_mask); }
Name &name() { return ifra_name; }
void addr(const InAddress &a) { ((sockaddr_in&)ifra_addr) = a.sockAddrFour(0); }
void broad(const InAddress &a) { ((sockaddr_in&)ifra_broadaddr) = a.sockAddrFour(0); }
void mask(const InAddress &a) { ((sockaddr_in&)ifra_mask) = a.sockAddrFour(0); }
};
inline
InetIfAliasReq::InetIfAliasReq(const String &aName) {
memset(this, 0, sizeof(*this));
strncpy(name(), aName.cstr(), sizeof(Name));
}
#if !defined(HAVE_TYPE_IN6_ALIASREQ)
// Assume we are on Linux if here
#define HAVE_TYPE_LINUX_IN6_IFREQ 1
struct in6_ifreq {
struct in6_addr ifr6_addr;
unsigned int ifr6_prefixlen;
unsigned int ifr6_ifindex;
};
struct in6_aliasreq: public in6_ifreq {
};
#endif
class Inet6IfAliasReq: public in6_aliasreq {
public:
Inet6IfAliasReq(const String &name, const InAddress &addr, const InAddress &mask);
};
#endif /* XSTD_NETWORK_INTERFACE_REQ_CLASS_H */
syntax highlighted by Code2HTML, v. 0.9.1