www.pudn.com > myrip.rar > myrip.h
#ifndef _MYRIP_H #define _MYRIP_H #include#include #include #include #include #include #include #include #include #include #include #include #include #include #define RIP_VERSION 1 #define RIP_REQUEST 1 #define RIP_RESPONSE 2 #define RIP_INFINITY 16 #define RIP_MAX_ENTRY 25 #define RIP_MAX_PACKET 504 #define RIP_PACKET_HEAD 4 #define RIP_PORT 520 #define ROUTE_MAX_ENTRY 256 #define LOCAL_ROUTE_ENTRY 10 #define ROUTE_VALID 1 #define ROUTE_UNVALID 0 #define RIP_CHECK_OK 1 #define RIP_CHECK_FAIL 0 #define BROADCAST_INTERVAL 10 #define CLOCK_TIMEOUT 15 #define GARBAGE_REMOVE_TIMEOUT 25 struct rip_entry { unsigned short family; unsigned short zero1; struct in_addr ip; unsigned int zero2; unsigned int zero3; unsigned int metric; }; struct rip_packet { unsigned char command; unsigned char version; unsigned short zero; struct rip_entry rip_entries[RIP_MAX_ENTRY]; }; struct route_entry { struct in_addr dest; struct in_addr next; unsigned int metric; time_t timer; int valid; int flag; }; struct rip_packet current_rip_packet; //struct rip_packet current_rip_packet_r; int current_rip_count; struct route_entry routing_table[ROUTE_MAX_ENTRY]; int current_route_count; int sockfd; pthread_mutex_t rt_mutex; pthread_mutex_t crp_mutex; struct in_addr local_addr; void print_routing_table(); void print_message(); void print_rip_packet(); int check_rip_packet(); int calculate_rip_metric(int rip_entry_number); void reset_rip_packet(int command); void init_routing_table(); void init_all(); void gen_request_all(); void send_rip_packet_to(struct in_addr &dest_ip); void broadcast_rip_packet(); void receive_rip_packet(); void handle_request(struct in_addr & source_ip); void handle_response(struct in_addr & source_ip); void start_rip_daemon(); void update_routing_table(); void * timer_routine(void *); char * local_ip[LOCAL_ROUTE_ENTRY]= { "195.51.0.0", "195.51.0.1", "195.51.0.2", "195.51.0.3", "195.51.0.4", "195.51.0.5", "195.51.0.6", "195.51.0.7", "195.51.0.8", "195.51.0.9" }; #endif