当前位置:文档之家› GPL关于RIP协议的实现代码分析

GPL关于RIP协议的实现代码分析

GPL关于RIP协议的实现代码分析

文档编号:00-6201-100

当前版本:1.0.0.0

创建日期:2011-12-22

编写作者:ganjingwei

RIP代码分析

前言 (3)

关于此文档 (3)

参考资料 (3)

第一章RIP协议报文格式 (4)

1.1 报文位置 (12)

1.2 RIP版本1报文 ............................................................................... 错误!未定义书签。

1.3 RIP版本2报文 ............................................................................... 错误!未定义书签。第二章动态学习过程. (14)

2.1 请求与应答...................................................................................... 错误!未定义书签。

2.1.1 初始化 (18)

2.1.2 接收到request ...................................................................... 错误!未定义书签。

2.1.3 接收到response .................................................................... 错误!未定义书签。

2.2 更新.................................................................................................. 错误!未定义书签。

2.2.1定期选路更新........................................................................ 错误!未定义书签。

2.2.2触发更新................................................................................ 错误!未定义书签。

2.3 其他机制与策略.............................................................................. 错误!未定义书签。

2.3.1 水平分割............................................................................... 错误!未定义书签。

2.3.2 定时删除............................................................................... 错误!未定义书签。

前言

关于此文档

此文档是本人这段时间内研究GPL发布的RIP协议源码,总结并且整理出来的文档。供大家参考。

本文档阐述代码相关研究,各章节说明如下:

1 前言,即此章节;

2 重要数据结构

3 接收与发送处理;

4 路由表结构

5 线程机制

6 ripd配置文件

参考资料

网络资源。

源码以linux2.6内核userspace为准。

第一章数据结构1.1 收发处理相关

1.1.1 struct rip

struct rip

{

/* RIP socket. */

int sock;

/* Default version of rip instance. */

u_char version;

/* Output buffer of RIP. */

struct stream *obuf;

/* RIP routing information base. */

struct route_table *table;

/* RIP only static routing information. */

struct route_table *route;

/* RIP neighbor. */

struct route_table *neighbor;

/* RIP threads. */

struct thread *t_read;

/* Update and garbage timer. */

struct thread *t_update;

/* Triggered update hack. */

int trigger;

struct thread *t_triggered_update;

struct thread *t_triggered_interval;

/* RIP timer values. */

unsigned long update_time;

unsigned long timeout_time;

unsigned long garbage_time;

/* RIP default metric. */

int default_metric;

/* RIP default-information originate. */

u_char default_information;

char *default_information_route_map;

/* RIP default distance. */

u_char distance;

struct route_table *distance_table;

/* For redistribute route map. */

struct

{

char *name;

struct route_map *map;

int metric_config;

u_int32_t metric;

} route_map[ZEBRA_ROUTE_MAX];

};

这个结构体包含ripd进程的所有信息,一个ripd进程只有一个struct rip 对象作为全局变量。struct route_table *table是ripd进程维护的路由表的指针;struct thread *类型的数据为进程中的伪线程链表头指针(下文详细描述);此外还包含其他各种信息。

相关主题