#ifndef RADIX_HEADER_736213980973149671328765 #define RADIX_HEADER_736213980973149671328765 #include "stdio.h" #include "stdlib.h" #include "string.h" #define VALID_RULE 1 #define INVALID_RULE 0 #define RULE_NOT_FOUND -1 union ipv6 { unsigned short s[8]; unsigned int i[4]; unsigned long l[2]; }; struct radix_node { struct radix_node* _l; struct radix_node* _r; union ipv6 _ip; unsigned short _rule; unsigned _ip_end_bit:7; unsigned _rule_valid:1; }; struct radix_holder { struct radix_node* _root; size_t _size; }; typedef struct radix_node* radix_node_t; typedef struct radix_holder* radix_holder_t; typedef union ipv6 ipv6_t; typedef int rule_t; struct radix_holder* create_holder(); struct radix_node* create_node(ipv6_t key, unsigned end_bit, unsigned rule); static struct radix_node* clone_node(struct radix_node* n); static void split_node(struct radix_node* n, unsigned bit); int destory_holder(struct radix_holder*); int destory_node(struct radix_node*); int radix_insert(struct radix_holder*, ipv6_t key, int val, int mask); rule_t radix_search(struct radix_holder*, ipv6_t key); #endif