UNIX网络编程---路由套接字(十八)

UNIX网络编程---路由套接字

一、概述

通过创建AF_ROUTE域对访问内核中路由子系统的接口做了清理。在路由域中支持的唯一一种套接字是原始套接字。路由套接字上支持3种类型的操作

1)  进程可以通过写到路由套接字而往内核发送消息。路径的添加和删除采用这种操作实现

2)  进程可以通过从路由套接字读入而自内核接受消息。内核采用这种操作通知进程已收到并处理一个ICMP重定向消息,或者请求外部路由进程解析一个路径

3)  进程可以使用sysctl函数倾泻出路由表或列出所有已配置的接口

 

二、数据链路套接字地址结构

通过路由套接字返回的一些信息中含有作为返回值给出的数据链路套接字地址结构。


Sdl_data成员含有名字和链路层地址(例如以太网接口的48位MAC地址)。名字从sdl_data[0]开始,而且不以空字符结尾。链路层地址从sdl_data[dsl_nlen]开始。

三、读和写

创建一个路由套接字后,进程可以通过写到该套接字向内核发送命令。通过读自该套接字从内核接受消息。路由套接字共有12个路由消息,其中5个可以由进程发出。

四、Sysctl操作

使用sysctl函数检查路由表和接口列表。创建路由套接字(一个AF_ROUTE域的原始套接字)需要超级用户权限,然而使用sysclt检查路由表和接口列表的进程却不限用户权限

#include <sys/param.h>

#include <sys/sysclt.h>

Int sysctl(int *name,u_int namelen,void *dldp,size_t*oldenp,void (newp,size_t newlen);

Name参数是指定名字的一个整数数组,namelen参数指定该数组中的元素个数。该数组总的第一个元素指定本请求定向到内核的哪个子系统。第二个及其后元素主次细化指定该子系统的某个部分。为了获取某个值,oldp参数指向一个供内核窜访该值的缓冲区。Oldenp则是一个值-结果参数;函数被调用时,oleenp指向的值指定该缓冲区的大小:函数返回时,该值给出内核存放在该缓冲区的数据量。

为了设置新值,newp参数指向一个大小为newlen参数值的缓冲区。如果不准备指定一个新值,那么newp应为一个空指针,newlen应为0.

五、Get_ini_info函数

六、接口名字和索引函数

 

你可能感兴趣的:(unix网络编程,路由套接字)