2024-06-07 16:57:34 +02:00
|
|
|
#ifndef RADIX_HEADER_736213980973149671328765
|
|
|
|
#define RADIX_HEADER_736213980973149671328765
|
|
|
|
|
|
|
|
#include "stdio.h"
|
|
|
|
#include "stdlib.h"
|
|
|
|
#include "string.h"
|
|
|
|
|
2024-06-09 17:36:35 +02:00
|
|
|
#define INVALID_RULE 0
|
2024-06-07 16:57:34 +02:00
|
|
|
|
2024-06-08 12:51:50 +02:00
|
|
|
struct routing_record {
|
2024-06-09 10:35:13 +02:00
|
|
|
unsigned long _ip[2];
|
|
|
|
unsigned short _rule;
|
2024-06-09 17:36:35 +02:00
|
|
|
unsigned _mask:8;
|
2024-06-07 16:57:34 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct radix_node {
|
|
|
|
struct radix_node* _l;
|
|
|
|
struct radix_node* _r;
|
2024-06-08 12:51:50 +02:00
|
|
|
struct routing_record _data;
|
2024-06-07 16:57:34 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct radix_holder {
|
|
|
|
struct radix_node* _root;
|
|
|
|
size_t _size;
|
|
|
|
};
|
|
|
|
|
2024-06-08 12:51:50 +02:00
|
|
|
typedef struct radix_node* radix_node_t;
|
|
|
|
typedef struct radix_holder* radix_holder_t;
|
|
|
|
typedef struct routing_record* record_t;
|
2024-06-07 16:57:34 +02:00
|
|
|
|
2024-06-09 10:35:13 +02:00
|
|
|
radix_holder_t create_holder();
|
2024-06-09 17:36:35 +02:00
|
|
|
static radix_node_t create_node(record_t record);
|
2024-06-09 10:35:13 +02:00
|
|
|
static radix_node_t clone_node(radix_node_t n);
|
2024-06-07 16:57:34 +02:00
|
|
|
static void split_node(struct radix_node* n, unsigned bit);
|
|
|
|
|
|
|
|
int destory_holder(struct radix_holder*);
|
2024-06-09 17:36:35 +02:00
|
|
|
static int destory_node(struct radix_node*);
|
2024-06-07 16:57:34 +02:00
|
|
|
|
2024-06-08 12:51:50 +02:00
|
|
|
int radix_insert(radix_holder_t, record_t);
|
|
|
|
int radix_search(radix_holder_t, record_t);
|
2024-06-07 16:57:34 +02:00
|
|
|
|
|
|
|
#endif
|