网络控制

本文详细探讨了网络控制的相关概念,包括网络结构、接口交互、数据结构在AIX系统中的应用,以及缓冲区管理的重要性。通过对这些核心元素的解析,读者可以更深入地了解网络控制的底层工作原理。
摘要由CSDN通过智能技术生成

引言

  文件描述符是低层的输入和输出接口。描述符可以表示到设备、管道或套接字的连接,这些连接用于与另一个进程或普通文件进行通信。I/O 控制 (ioctl) 函数调用可以用来对特殊文件的基础设备参数进行操作。它们可以完成与打开的文件描述符相关联的控制功能。这些命令涉及文件、流、普通数据链路控制以及其他各种设备。

  本文将讨论 AIX Version 5.3 中提供的与网络操作和套接字相关的命令。在下列文件中列出了与套接字相关的命令和结构:

  sys/ioctl.h

  net/if_arp.h

  net/if.h

  net/netopt.h

  netinet/in.h

  应用程序开发人员可以使用这些命令,并且在 AIX Version 5.3 的文档中对这些命令进行了详细的描述。本文说明了有关 Internet Protocol Version 6 (IPv6) 地址和 Internet Protocol Version 4 (IPv4) 堆栈的常用命令的典型用法。

  使用 ioctl 套接字控制选项

  通常,网络程序需要了解系统中所有有关网络接口和 IP 地址的可用信息。现在,未来的应用程序可以支持 IPv4 和 IPv6 双协议栈。ioctl 结构需要对指针进行遍历和操作,以处理 IPv4 和 IPv6 地址在长度上的差别(除了使用合适的套接字结构 sockaddr_in6 或 sockaddr_storage 之外)。

  AIX Version 5.3 提供了很多 ioctl 套接字控制选项,以提取各种有关网络接口的信息。这些 ioctl 命令用于查询接口的状态并对其属性进行操作。下面的部分中包含了一些有用的命令的代码段。有关 ioctl 命令的完整列表,请参见参考资料部分。

  ioctl 命令所使用的结构

  下面的清单介绍了一些最重要的结构,使用 ioctl 套接字命令时常常用到这些结构。

  

  清单 1. struct ifreq (/usr/include/net/if.h)

  

  /* Interface request structure used for socket

  * ioctl"s. All interface ioctl"s must have parameter

  * definitions which begin with ifr_name. The

  * remainder may be interface specific.

  */

  struct ifreq {

  #ifndef IFNAMSIZ

  #define IFNAMSIZ    16

  #endif

  char  ifr_name[IFNAMSIZ];

  union {

  struct sockaddr ifru_addr;

  struct sockaddr ifru_dstaddr;

  struct sockaddr ifru_broadaddr;

  __ulong32_t   ifru_flags;

  int   ifru_metric;

  CADdr_t ifru_data;

  u_short ifru_site6;

  __ulong32_t  ifru_mtu;

  int   ifru_baudrate;

  } ifr_ifru;

  Following Macros are provided for convenIEnce

  #define ifr_addr    ifr_ifru.ifru_addr   /* address */

  #define ifr_dstaddr   ifr_ifru.ifru_dstaddr  /* other end of p-to-p link */

  #define ifr_broadaddr  ifr_ifru.ifru_broadaddr /* broadcast address */

  #define ifr_flags    ifr_ifru.ifru_flags   /* flags */

  #define ifr_metric   ifr_ifru.ifru_metric  /* metric */

  #define ifr_data    ifr_ifru.ifru_data   /* for use by interface */

  #define ifr_site6    ifr_ifru.ifru_site6   /* IPv6 site index */

  #define ifr_mtu     ifr_ifru.ifru_mtu    /* mtu of interface */

  #define ifr_isno    ifr_ifru.ifru_data   /* pointer to if_netopts */

  #define ifr_baudrate  ifr_ifru.ifru_baudrate /* baudrate of interface */

  };  

  清单 2. struct ifconf (/usr/include/net/if.h)  

  /*

  * Structure used in SIOCGIFCONF request.

  * Used to retrieve interface configuration

  * for machine (useful for programs which

  * must know all networks accessible).

  */

  struct ifconf {

  int   ifc_len;        /* size of associated buffer */

  union {

  caddr_t ifcu_buf;

  struct ifreq *ifcu_req;

  } ifc_ifcu;

  Following macros are provided for convenience

  #define ifc_buf ifc_ifcu.ifcu_buf    /* buffer address */

  #define ifc_req ifc_ifcu.ifcu_req    /* array of structures returned */

  };

  

  代码示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值