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