diff -urN AODV6-R0.2.org/ipv6_utils.c AODV6-R0.2/ipv6_utils.c --- AODV6-R0.2.org/ipv6_utils.c 2003-07-12 11:10:31.000000000 +0900 +++ AODV6-R0.2/ipv6_utils.c 2003-11-11 14:48:25.000000000 +0900 @@ -124,30 +124,28 @@ char addr6p[8][5]; - if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) - { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", + if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) == NULL) { + return -1; + } + while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], &(interface_info->if_idx), &(interface_info->plen), &(interface_info->scope), &(interface_info->dad_status), - devname) != EOF) - { + devname) != EOF) { if ((interface_info->scope == IPV6_ADDR_SITELOCAL) && //if ((interface_info->scope == IPV6_ADDR_LINKLOCAL) && - (!strcmp(devname, ifname)) ) - { - sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - memcpy(interface_info->devname, devname, sizeof(devname)); - inet_pton(AF_INET6, addr6, &(interface_info->ipv6_addr)); - //PL: info for the request device found, return - fclose(f); - return 0; - } - } - } + (!strcmp(devname, ifname)) ) { + sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", + addr6p[0], addr6p[1], addr6p[2], addr6p[3], + addr6p[4], addr6p[5], addr6p[6], addr6p[7]); + memcpy(interface_info->devname, devname, sizeof(devname)); + inet_pton(AF_INET6, addr6, &(interface_info->ipv6_addr)); + //PL: info for the request device found, return + fclose(f); + return 0; + } + } fclose(f); return -1; } diff -urN AODV6-R0.2.org/kaodv6.c AODV6-R0.2/kaodv6.c --- AODV6-R0.2.org/kaodv6.c 2003-07-12 11:10:31.000000000 +0900 +++ AODV6-R0.2/kaodv6.c 2003-11-11 13:47:44.000000000 +0900 @@ -66,6 +66,51 @@ unsigned int ifindices[MAX_INTERFACES]; int nif = 0; + +//PL: flowi structure is taken out from /usr/src/linux/include/net/flow.h +struct flowi { + int proto; /* {TCP, UDP, ICMP} */ + + union { + struct { + __u32 daddr; + __u32 saddr; + } ip4_u; + + struct { + struct in6_addr * daddr; + struct in6_addr * saddr; + __u32 flowlabel; + } ip6_u; + } nl_u; +#define fl6_dst nl_u.ip6_u.daddr +#define fl6_src nl_u.ip6_u.saddr +#define fl6_flowlabel nl_u.ip6_u.flowlabel +#define fl4_dst nl_u.ip4_u.daddr +#define fl4_src nl_u.ip4_u.saddr + + int oif; + + union { + struct { + __u16 sport; + __u16 dport; + } ports; + + struct { + __u8 type; + __u8 code; + } icmpt; + + unsigned long data; + } uli_u; +}; + +#define FLOWR_NODECISION 0 /* rule not appliable to flow */ +#define FLOWR_SELECT 1 /* flow must follow this rule */ +#define FLOWR_CLEAR 2 /* priority level clears flow */ +#define FLOWR_ERROR 3 + /* This function is taken from the kernel ip_queue.c source file. It * seem to have been moved to net/core/netfilter.c in later kernel * versions (verified for 2.4.18). There it is called @@ -126,51 +171,7 @@ return 0; } */ -#endif - -//PL: flowi structure is taken out from /usr/src/linux/include/net/flow.h -struct flowi { - int proto; /* {TCP, UDP, ICMP} */ - - union { - struct { - __u32 daddr; - __u32 saddr; - } ip4_u; - - struct { - struct in6_addr * daddr; - struct in6_addr * saddr; - __u32 flowlabel; - } ip6_u; - } nl_u; -#define fl6_dst nl_u.ip6_u.daddr -#define fl6_src nl_u.ip6_u.saddr -#define fl6_flowlabel nl_u.ip6_u.flowlabel -#define fl4_dst nl_u.ip4_u.daddr -#define fl4_src nl_u.ip4_u.saddr - - int oif; - - union { - struct { - __u16 sport; - __u16 dport; - } ports; - - struct { - __u8 type; - __u8 code; - } icmpt; - - unsigned long data; - } uli_u; -}; - -#define FLOWR_NODECISION 0 /* rule not appliable to flow */ -#define FLOWR_SELECT 1 /* flow must follow this rule */ -#define FLOWR_CLEAR 2 /* priority level clears flow */ -#define FLOWR_ERROR 3 +#else /*USE_OLD_ROUTE_ME_HARDER*/ //PL: Locally defined the route6_me_harder @@ -205,6 +206,8 @@ return 0; } +#endif /*USE_OLD_ROUTE_ME_HARDER*/ + unsigned int nf_aodv_hook(unsigned int hooknum, struct sk_buff **skb, const struct net_device *in,