contrib/fwd: renamed struct fwd_{addr,network}_list to struct fwd_{network,addr}
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 20 Dec 2009 02:37:26 +0000 (02:37 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 20 Dec 2009 02:37:26 +0000 (02:37 +0000)
contrib/fwd/src/fwd.h
contrib/fwd/src/fwd_addr.c
contrib/fwd/src/fwd_addr.h
contrib/fwd/src/fwd_xtables.c
contrib/fwd/src/fwd_xtables.h

index 0228daf7b6d3de6920c08e894b4a30ce294dc966..6de8b880c952868840630d08754ed2a2a41c492d 100644 (file)
 #include <stdarg.h>
 #include <stdlib.h>
 #include <getopt.h>
+#include <signal.h>
 #include <netinet/in.h>
 
-#if 0
-#include "fwd_addr.h"
-#include "fwd_rules.h"
-#include "fwd_config.h"
-#endif
 
 enum fwd_policy {
        FWD_P_UNSPEC = 0,
@@ -83,12 +79,12 @@ struct fwd_icmptype {
        int code;
 };
 
-struct fwd_network_list {
+struct fwd_network {
        char *name;
        char *ifname;
        int isalias;
        struct fwd_cidr *addr;
-       struct fwd_network_list *next;
+       struct fwd_network *next;
 };
 
 struct fwd_defaults {
@@ -103,7 +99,7 @@ struct fwd_defaults {
 
 struct fwd_zone {
        char *name;
-       struct fwd_network_list *networks;
+       struct fwd_network *networks;
        struct fwd_data *forwardings;
        struct fwd_data *redirects;
        struct fwd_data *rules;
@@ -168,23 +164,11 @@ struct fwd_data {
 
 struct fwd_handle {
        int rtnl_socket;
+       int unix_socket;
        struct fwd_data *conf;
-       struct fwd_addr_list *addrs;
 };
 
 
-/* fwd_zmalloc(size_t)
- * Allocates a zeroed buffer of the given size. */
-static void * fwd_zmalloc(size_t s)
-{
-       void *b = malloc(s);
-
-       if( b != NULL )
-               memset(b, 0, s);
-
-       return b;
-}
-
 /* fwd_fatal(fmt, ...)
  * Prints message to stderr and termintes program. */
 #define fwd_fatal(...) do {       \
@@ -194,14 +178,5 @@ static void * fwd_zmalloc(size_t s)
        exit(1);                      \
 } while(0)
 
-/* fwd_alloc_ptr(type)
- * Allocates a buffer with the size of the given datatype
- * and returns a pointer to it. */
-#define fwd_alloc_ptr(t) (t *) fwd_zmalloc(sizeof(t))
-
-/* fwd_free_ptr(void *)
- * Frees the given pointer and sets it to NULL.
- * Safe for NULL values. */
-#define fwd_free_ptr(x) do { if(x != NULL) free(x); x = NULL; } while(0)
 
 #endif
index fd277e9e0f54b8a5714b5ab98f04862bd556a3c0..62e65aa62bbfff27e340daca55cce11d653a2c0d 100644 (file)
@@ -19,8 +19,9 @@
 
 #include "fwd.h"
 #include "fwd_addr.h"
+#include "fwd_utils.h"
 
-struct fwd_addr_list * fwd_get_addrs(int fd, int family)
+struct fwd_addr * fwd_get_addrs(int fd, int family)
 {
        struct {
                  struct nlmsghdr n;
@@ -37,7 +38,7 @@ struct fwd_addr_list * fwd_get_addrs(int fd, int family)
        struct nlmsghdr *nlmp;
        struct ifaddrmsg *rtmp;
 
-       struct fwd_addr_list *head, *entry;
+       struct fwd_addr *head, *entry;
 
        /* Build request */
        memset(&req, 0, sizeof(req));
@@ -83,7 +84,7 @@ struct fwd_addr_list * fwd_get_addrs(int fd, int family)
                        rtmp  = (struct ifaddrmsg *) NLMSG_DATA(nlmp);
                        rtatp = (struct rtattr *) IFA_RTA(rtmp);
 
-                       if( !(entry = fwd_alloc_ptr(struct fwd_addr_list)) )
+                       if( !(entry = fwd_alloc_ptr(struct fwd_addr)) )
                                goto error;
 
                        entry->index = rtmp->ifa_index;
@@ -124,9 +125,20 @@ struct fwd_addr_list * fwd_get_addrs(int fd, int family)
        return NULL;
 }
 
-void fwd_free_addrs(struct fwd_addr_list *head)
+struct fwd_cidr * fwd_lookup_addr(struct fwd_addr *head, const char *ifname)
 {
-       struct fwd_addr_list *entry = head;
+       struct fwd_addr *entry;
+
+       for( entry = head; entry; entry = entry->next )
+               if( !strncmp(entry->ifname, ifname, IFNAMSIZ) )
+                       return &entry->ipaddr;
+
+       return NULL;
+}
+
+void fwd_free_addrs(struct fwd_addr *head)
+{
+       struct fwd_addr *entry = head;
 
        while( entry != NULL )
        {
@@ -138,9 +150,9 @@ void fwd_free_addrs(struct fwd_addr_list *head)
        head = entry = NULL;
 }
 
-struct fwd_addr_list * fwd_append_addrs(struct fwd_addr_list *head, struct fwd_addr_list *add)
+struct fwd_addr * fwd_append_addrs(struct fwd_addr *head, struct fwd_addr *add)
 {
-       struct fwd_addr_list *entry = head;
+       struct fwd_addr *entry = head;
 
        while( entry->next != NULL )
                entry = entry->next;
index 44465705af827fcd3e7e729ee6045a03365ad881..3cabe09a016128df40e671fade4c70c86591101f 100644 (file)
 #include <arpa/inet.h>
 
 
-struct fwd_addr_list {
+struct fwd_addr {
        char ifname[IFNAMSIZ];
        char label[IFNAMSIZ];
        int family;
        int index;
        struct fwd_cidr ipaddr;
-       struct fwd_addr_list *next;
+       struct fwd_addr *next;
 };
 
 
-struct fwd_addr_list * fwd_get_addrs(int, int);
-struct fwd_addr_list * fwd_append_addrs(struct fwd_addr_list *, struct fwd_addr_list *);
-void fwd_free_addrs(struct fwd_addr_list *);
+struct fwd_addr * fwd_get_addrs(int, int);
+struct fwd_addr * fwd_append_addrs(struct fwd_addr *, struct fwd_addr *);
+void fwd_free_addrs(struct fwd_addr *);
+
+struct fwd_cidr * fwd_lookup_addr(struct fwd_addr *, const char *);
 
 #define fwd_foreach_addrs(head, entry) for(entry = head; entry; entry = entry->next)
 
index c0a3c582d870144ea51190a30667c1ec21c9d196..895715d9241cb7823ac93efbf84ced3633edcdda 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "fwd.h"
 #include "fwd_xtables.h"
+#include "fwd_utils.h"
 
 
 /* Required by certain extensions like SNAT and DNAT */
@@ -129,7 +130,7 @@ void fwd_xt_parse_proto(
 }
 
 void fwd_xt_parse_in(
-       struct fwd_xt_rule *r, struct fwd_network_list *n, int inv
+       struct fwd_xt_rule *r, struct fwd_network *n, int inv
 ) {
        if( n != NULL )
        {
@@ -141,7 +142,7 @@ void fwd_xt_parse_in(
 }
 
 void fwd_xt_parse_out(
-       struct fwd_xt_rule *r, struct fwd_network_list *n, int inv
+       struct fwd_xt_rule *r, struct fwd_network *n, int inv
 ) {
        if( n != NULL )
        {
index 45b638a058ee9a25f6a85c8d1620ca3bcb47046a..1ac57bb0e9e2e1a1d05b522bb5736e18444350c3 100644 (file)
@@ -50,8 +50,8 @@ void fwd_xt_init(void);
 struct fwd_xt_rule * fwd_xt_init_rule(struct iptc_handle *h);
 
 void fwd_xt_parse_proto(struct fwd_xt_rule *r, struct fwd_proto *p, int inv);
-void fwd_xt_parse_in(struct fwd_xt_rule *r, struct fwd_network_list *n, int inv);
-void fwd_xt_parse_out(struct fwd_xt_rule *r, struct fwd_network_list *n, int inv);
+void fwd_xt_parse_in(struct fwd_xt_rule *r, struct fwd_network *n, int inv);
+void fwd_xt_parse_out(struct fwd_xt_rule *r, struct fwd_network *n, int inv);
 void fwd_xt_parse_src(struct fwd_xt_rule *r, struct fwd_cidr *c, int inv);
 void fwd_xt_parse_dest(struct fwd_xt_rule *r, struct fwd_cidr *c, int inv);
 void fwd_xt_parse_frag(struct fwd_xt_rule *r, int frag, int inv);