#include <sys/socket.h>
#include <types/protocol.h>
-extern struct protocol *__protocol_by_family[AF_MAX];
+extern struct protocol *__protocol_by_family[AF_CUST_MAX];
/* Registers the protocol <proto> */
void protocol_register(struct protocol *proto);
/* returns the protocol associated to family <family> or NULL if not found */
static inline struct protocol *protocol_by_family(int family)
{
- if (family >= 0 && family < AF_MAX)
+ if (family >= 0 && family < AF_CUST_MAX)
return __protocol_by_family[family];
return NULL;
}
struct listener;
struct connection;
+/*
+ * Custom network family for str2sa parsing. Should be ok to do this since
+ * sa_family_t is standardized as an unsigned integer
+ */
+
+#define AF_CUST_SOCKPAIR (AF_MAX + 1)
+#define AF_CUST_MAX (AF_MAX + 2)
+
+/*
+ * Test in case AF_CUST_MAX overflows the sa_family_t (unsigned int)
+ */
+#if (AF_CUST_MAX < AF_MAX)
+# error "Can't build on the target system, AF_CUST_MAX overflow"
+#endif
+
+
+
/* max length of a protcol name, including trailing zero */
#define PROTO_NAME_LEN 16
/* List head of all registered protocols */
static struct list protocols = LIST_HEAD_INIT(protocols);
-struct protocol *__protocol_by_family[AF_MAX] = { };
+struct protocol *__protocol_by_family[AF_CUST_MAX] = { };
/* Registers the protocol <proto> */
void protocol_register(struct protocol *proto)
{
LIST_ADDQ(&protocols, &proto->list);
- if (proto->sock_domain >= 0 && proto->sock_domain < AF_MAX)
+ if (proto->sock_domain >= 0 && proto->sock_domain < AF_CUST_MAX)
__protocol_by_family[proto->sock_domain] = proto;
}