X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=secnet.h;h=628a7555f3e38213eb44efe883fe1250dd8dbf7f;hb=61dbc9e060153651a0d4eecac5a5fab1c36fa530;hp=f458f8a345724e3cdb78b2dcf25b7ac1b873261f;hpb=a32d56fb47ceff7404072e49a21290fc7314a7c3;p=secnet.git diff --git a/secnet.h b/secnet.h index f458f8a..628a755 100644 --- a/secnet.h +++ b/secnet.h @@ -33,6 +33,9 @@ typedef _Bool bool_t; union iaddr { struct sockaddr sa; struct sockaddr_in sin; +#ifdef CONFIG_IPV6 + struct sockaddr_in6 sin6; +#endif }; #define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \ @@ -334,11 +337,6 @@ struct rsaprivkey_if { struct comm_addr { /* This struct is pure data; in particular comm's clients may freely copy it. */ - /* Everyone is also guaranteed that all padding is set to zero, ie - that comm_addrs referring to semantically identical peers will - compare equal with memcmp. Anyone who constructs a comm_addr - must start by memsetting it with FILLZERO, or some - equivalent. */ struct comm_if *comm; union iaddr ia; }; @@ -367,11 +365,19 @@ struct comm_if { comm_addr_to_string_fn *addr_to_string; }; +bool_t iaddr_equal(const union iaddr *ia, const union iaddr *ib); + static inline const char *comm_addr_to_string(const struct comm_addr *ca) { return ca->comm->addr_to_string(ca->comm->st, ca); } +static inline bool_t comm_addr_equal(const struct comm_addr *a, + const struct comm_addr *b) +{ + return a->comm==b->comm && iaddr_equal(&a->ia,&b->ia); +} + /* LOG interface */ #define LOG_MESSAGE_BUFLEN 1023