Usermode/libnet - Added support for change to routing API
authorJohn Hodge <[email protected]>
Wed, 23 Mar 2011 05:35:22 +0000 (13:35 +0800)
committerJohn Hodge <[email protected]>
Wed, 23 Mar 2011 05:35:22 +0000 (13:35 +0800)
Usermode/Libraries/libnet.so_src/main.c
Usermode/Libraries/libnet.so_src/net.h

index 938d114..7f8d048 100644 (file)
@@ -28,6 +28,32 @@ int Net_GetAddressSize(int AddressType)
        }
 }
 
+int Net_OpenSocket(int AddrType, void *Addr, const char *Filename)
+{
+        int    addrLen = Net_GetAddressSize(AddrType);
+        int    i;
+       uint8_t *addrBuffer = Addr;
+       char    hexAddr[addrLen*2+1];
+       
+       for( i = 0; i < addrLen; i ++ )
+               sprintf(hexAddr+i*2, "%02x", addrBuffer[i]);
+       
+       if(Filename)
+       {
+                int    len = snprintf(NULL, 100, "/Devices/ip/routes/%i:%s/%s", AddrType, hexAddr, Filename);
+               char    path[len+1];
+               snprintf(path, 100, "/Devices/ip/routes/%i:%s/%s", AddrType, hexAddr, Filename);
+               return open(path, OPENFLAG_READ|OPENFLAG_WRITE);
+       }
+       else
+       {
+                int    len = snprintf(NULL, 100, "/Devices/ip/routes/%i:%s", AddrType, hexAddr);
+               char    path[len+1];
+               snprintf(path, 100, "/Devices/ip/routes/%i:%s", AddrType, hexAddr);
+               return open(path, OPENFLAG_READ);
+       }
+}
+
 //TODO: Move out to another file
 char *Net_GetInterface(int AddressType, void *Address)
 {
index fcd213f..d02da0b 100644 (file)
@@ -6,6 +6,12 @@
 #ifndef __LIBNET_H_
 #define __LIBNET_H_
 
+enum {
+       NET_ADDRTYPE_NULL = 0,
+       NET_ADDRTYPE_IPV4 = 4,
+       NET_ADDRTYPE_IPV6 = 6
+};
+
 /**
  * \brief Parse a string as an IP Address
  * \param String       Input string
@@ -36,4 +42,17 @@ extern int Net_GetAddressSize(int AddressType);
  */
 extern char    *Net_GetInterface(int AddrType, void *Addr);
 
+/**
+ * \brief Open a network socket file
+ * \param AddrType     Address family
+ * \param Addr Binary address
+ * \param SocketName   Socket type to open (e.g. tcpc for TCP client)
+ *                      If NULL, the node directory is opened
+ * \return Socket file descriptor (as returned by \a open), or -1 on error
+ * 
+ * Opens a file using /Devices/ip/routes/<AddrType>:<Addr>/<SocketName>
+ * 
+ */
+extern int     Net_OpenSocket(int AddrType, void *Addr, const char *SocketName);
+
 #endif

UCC git Repository :: git.ucc.asn.au