kernel-netlink: Support extended table IDs for custom routes
[strongswan.git] / src / libcharon / network / socket.h
index 4a4ef52..e8ee5e3 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * Copyright (C) 2006-2012 Tobias Brunner
+ * Copyright (C) 2006-2013 Tobias Brunner
  * Copyright (C) 2005-2010 Martin Willi
  * Copyright (C) 2006 Daniel Roethlisberger
  * Copyright (C) 2005 Jan Hutter
- * Hochschule fuer Technik Rapperswil
+ * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
 #define SOCKET_H_
 
 typedef struct socket_t socket_t;
+typedef enum socket_family_t socket_family_t;
 
 #include <library.h>
-#include <network/packet.h>
-#include <utils/enumerator.h>
+#include <networking/packet.h>
+#include <collections/enumerator.h>
 #include <plugins/plugin.h>
 
 /**
@@ -37,6 +38,31 @@ typedef struct socket_t socket_t;
 typedef socket_t *(*socket_constructor_t)();
 
 /**
+ * Address families supported by socket implementations.
+ */
+enum socket_family_t {
+       /**
+        * No address families supported
+        */
+       SOCKET_FAMILY_NONE = 0,
+
+       /**
+        * IPv4
+        */
+       SOCKET_FAMILY_IPV4 = (1 << 0),
+
+       /**
+        * IPv6
+        */
+       SOCKET_FAMILY_IPV6 = (1 << 1),
+
+       /**
+        * Both address families supported
+        */
+       SOCKET_FAMILY_BOTH = (1 << 2) - 1,
+};
+
+/**
  * Socket interface definition.
  */
 struct socket_t {
@@ -52,7 +78,7 @@ struct socket_t {
         *                                              - SUCCESS when packet successfully received
         *                                              - FAILED when unable to receive
         */
-       status_t (*receive) (socket_t *this, packet_t **packet);
+       status_t (*receive)(socket_t *this, packet_t **packet);
 
        /**
         * Send a packet.
@@ -65,7 +91,7 @@ struct socket_t {
         *                                              - SUCCESS when packet successfully sent
         *                                              - FAILED when unable to send
         */
-       status_t (*send) (socket_t *this, packet_t *packet);
+       status_t (*send)(socket_t *this, packet_t *packet);
 
        /**
         * Get the port this socket is listening on.
@@ -73,12 +99,19 @@ struct socket_t {
         * @param nat_t                 TRUE to get the port used to float in case of NAT-T
         * @return                              the port
         */
-       u_int16_t (*get_port) (socket_t *this, bool nat_t);
+       uint16_t (*get_port)(socket_t *this, bool nat_t);
+
+       /**
+        * Get the address families this socket is listening on.
+        *
+        * @return                              supported families
+        */
+       socket_family_t (*supported_families)(socket_t *this);
 
        /**
         * Destroy a socket implementation.
         */
-       void (*destroy) (socket_t *this);
+       void (*destroy)(socket_t *this);
 };
 
 /**