📄 iflib.c
字号:
** This routine gets the Internet address of a specified network interface and* copies it to <interfaceAddress>. This pointer should point to a buffer* large enough to contain INET_ADDR_LEN bytes.** RETURNS: OK or ERROR.** SEE ALSO: ifAddrSet(), ifDstAddrSet(), ifDstAddrGet()*/STATUS ifAddrGet ( char *interfaceName, /* name of interface, i.e. ei0 */ char *interfaceAddress /* buffer for Internet address */ ) { return (ifAddrParamGet (interfaceName, SIOCGIFADDR, interfaceAddress)); }/********************************************************************************* ifBroadcastSet - set the broadcast address for a network interface** This routine assigns a broadcast address for the specified network interface.* The broadcast address must be a string in standard Internet address format* (e.g., 90.0.0.0).** An interface's default broadcast address is its Internet address with a* host part of all ones (e.g., 90.255.255.255). This conforms to current* ARPA specifications. However, some older systems use an Internet address* with a host part of all zeros as the broadcast address.** NOTE* VxWorks automatically accepts a host part of all zeros as a broadcast* address, in addition to the default or specified broadcast address. But* if VxWorks is to broadcast to older systems using a host part of all zeros* as the broadcast address, this routine should be used to change the* broadcast address of the interface.** RETURNS: OK or ERROR.*/STATUS ifBroadcastSet ( char *interfaceName, /* name of interface to assign, i.e. ei0 */ char *broadcastAddress /* broadcast address to assign to interface */ ) { return (ifIoctl (interfaceName, SIOCSIFBRDADDR, (int)broadcastAddress)); }/********************************************************************************* ifBroadcastGet - get the broadcast address for a network interface** This routine gets the broadcast address for a specified network interface.* The broadcast address is copied to the buffer <broadcastAddress>.** RETURNS: OK or ERROR.** SEE ALSO: ifBroadcastSet()*/STATUS ifBroadcastGet ( char *interfaceName, /* name of interface, i.e. ei0 */ char *broadcastAddress /* buffer for broadcast address */ ) { return (ifAddrParamGet (interfaceName, SIOCGIFBRDADDR, broadcastAddress)); }/********************************************************************************* ifDstAddrSet - define an address for the other end of a point-to-point link** This routine assigns the Internet address of a machine connected to the* opposite end of a point-to-point network connection, such as a SLIP* connection. Inherently, point-to-point connection-oriented protocols such as* SLIP require that addresses for both ends of a connection be specified.** RETURNS: OK or ERROR.** SEE ALSO: ifAddrSet(), ifDstAddrGet()*/STATUS ifDstAddrSet ( char *interfaceName, /* name of interface to configure, i.e. ei0 */ char *dstAddress /* Internet address to assign to destination */ ) { return (ifIoctl (interfaceName, SIOCSIFDSTADDR, (int)dstAddress)); }/********************************************************************************* ifDstAddrGet - get the Internet address of a point-to-point peer** This routine gets the Internet address of a machine connected to the* opposite end of a point-to-point network connection. The Internet address is* copied to the buffer <dstAddress>.** RETURNS: OK or ERROR.** SEE ALSO: ifDstAddrSet(), ifAddrGet()*/STATUS ifDstAddrGet ( char *interfaceName, /* name of interface, i.e. ei0 */ char *dstAddress /* buffer for destination address */ ) { return (ifAddrParamGet (interfaceName, SIOCGIFDSTADDR, dstAddress)); }/********************************************************************************* ifAddrParamGet - call ifIoctl to get the Internet address of the interface** ifAddrParamGet may be used to retrieve Internet address of the network* interface in ASCII character string representation (dot-notation* like "192.0.0.3").** RETURNS: OK or ERROR** ERRNO: EINVAL** SEE ALSO: ifAddrGet (), ifDstAddrGet (), ifBroadcastGet ()*/LOCAL STATUS ifAddrParamGet ( char *interfaceName, /* name of interface to configure, i.e. ei0 */ int code, /* SIOCG ioctl code */ char *address /* address retrieved here */ ) { struct in_addr inetAddrBuf; /* result */ char netString [INET_ADDR_LEN]; if (address == NULL) { (void)errnoSet (EINVAL); return (ERROR); } if (ifIoctl (interfaceName, code, (int)&inetAddrBuf) == OK) { inet_ntoa_b (inetAddrBuf, netString); strncpy (address, netString, INET_ADDR_LEN); return (OK); } return (ERROR); }/********************************************************************************* ifMaskSet - define a subnet for a network interface** This routine allocates additional bits to the network portion of an* Internet address. The network portion is specified with a mask that must* contain ones in all positions that are to be interpreted as the network* portion. This includes all the bits that are normally interpreted as the* network portion for the given class of address, plus the bits to be added.* Note that all bits must be contiguous. The mask is specified in host byte* order.** In order to correctly interpret the address, a subnet mask should be set* for an interface prior to setting the Internet address of the interface* with the routine ifAddrSet().** RETURNS: OK or ERROR.** SEE ALSO: ifAddrSet()*/STATUS ifMaskSet ( char *interfaceName, /* name of interface to set mask for, i.e. ei0 */ int netMask /* subnet mask (e.g. 0xff000000) */ ) { return (ifIoctl (interfaceName, SIOCSIFNETMASK, htonl (netMask))); }/********************************************************************************* ifMaskGet - get the subnet mask for a network interface** This routine gets the subnet mask for a specified network interface.* The subnet mask is copied to the buffer <netMask>. The subnet mask is* returned in host byte order.** RETURNS: OK or ERROR.** SEE ALSO: ifAddrGet(), ifFlagGet()*/STATUS ifMaskGet ( char *interfaceName, /* name of interface, i.e. ei0 */ int *netMask /* buffer for subnet mask */ ) { int status = ifIoctl (interfaceName, SIOCGIFNETMASK, (u_long) netMask); if (status != ERROR) *netMask = ntohl (*netMask); return (status); }/********************************************************************************* ifFlagChange - change the network interface flags** This routine changes the flags for the specified network interfaces. If* the parameter <on> is TRUE, the specified flags are turned on; otherwise,* they are turned off. The routines ifFlagGet() and ifFlagSet() are called* to do the actual work.** RETURNS: OK or ERROR.** SEE ALSO: ifAddrSet(), ifMaskSet(), ifFlagSet(), ifFlagGet()*/STATUS ifFlagChange ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int flags, /* the flag to be changed */ BOOL on /* TRUE=turn on, FALSE=turn off */ ) { int oldFlags; if (ifFlagGet (interfaceName, &oldFlags) == ERROR) { return (ERROR); } if (on) oldFlags |= flags; else oldFlags &= ~flags; return (ifFlagSet (interfaceName, oldFlags)); }/********************************************************************************* ifFlagSet - specify the flags for a network interface** This routine changes the flags for a specified network interface.* Any combination of the following flags can be specified:** .iP "IFF_UP (0x1)" 20* Brings the network up or down.* .iP "IFF_DEBUG (0x4)"* Turns on debugging for the driver interface if supported.* .iP "IFF_LOOPBACK (0x8)"* Set for a loopback network.* .iP "IFF_NOTRAILERS (0x20)"* Always set (VxWorks does not use the trailer protocol).* .iP "IFF_PROMISC (0x100)"* Tells the driver to accept all packets, not just broadcast packets and* packets addressed to itself. * .iP "IFF_ALLMULTI (0x200)"* Tells the driver to accept all multicast packets.* .iP "IFF_NOARP (0x80)"* Disables ARP for the interface.* .LP** NOTE* The following flags can only be set at interface initialization time.* Specifying these flags does not change any settings in the interface* data structure.** .iP "IFF_POINTOPOINT (0x10)" 20* Identifies a point-to-point interface such as PPP or SLIP.* .iP "IFF_RUNNING (0x40)"* Set when the device turns on.* .iP "IFF_BROADCAST (0x2)"* Identifies a broadcast interface.* .LP** RETURNS: OK or ERROR.** SEE ALSO: ifFlagChange(), ifFlagGet()*/STATUS ifFlagSet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int flags /* network flags */ ) { return (ifIoctl (interfaceName, SIOCSIFFLAGS, flags)); }/********************************************************************************* ifFlagGet - get the network interface flags** This routine gets the flags for a specified network interface.* The flags are copied to the buffer <flags>.** RETURNS: OK or ERROR.** SEE ALSO: ifFlagSet()*/STATUS ifFlagGet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int *flags /* network flags returned here */ ) { return (ifIoctl (interfaceName, SIOCGIFFLAGS, (int)flags)); }/********************************************************************************* ifMetricSet - specify a network interface hop count** This routine configures <metric> for a network interface from the host* machine to the destination network. This information is used primarily by* the IP routing algorithm to compute the relative distance for a collection* of hosts connected to each interface. For example, a higher <metric> for* SLIP interfaces can be specified to discourage routing a packet to slower* serial line connections. Note that when <metric> is zero, the IP routing* algorithm allows for the direct sending of a packet having an IP network* address that is not necessarily the same as the local network address.** RETURNS: OK or ERROR.** SEE ALSO: ifMetricGet()*/STATUS ifMetricSet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int metric /* metric for this interface */ ) { return (ifIoctl (interfaceName, SIOCSIFMETRIC, metric)); }/********************************************************************************* ifMetricGet - get the metric for a network interface** This routine retrieves the metric for a specified network interface.* The metric is copied to the buffer <pMetric>.** RETURNS: OK or ERROR.** SEE ALSO: ifMetricSet()*/STATUS ifMetricGet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int *pMetric /* returned interface's metric */ ) { return (ifIoctl (interfaceName, SIOCGIFMETRIC, (int)pMetric)); }/********************************************************************************* ifIoctl - network interface ioctl front-end** Used to manipulate the characteristics of network interfaces* using socket specific ioctl functions SIOCSIFADDR, SIOCSIFBRDADDR, etc.* ifIoctl() accomplishes this by calling ifIoctlSet() and ifIoctlGet().** RETURNS: OK or ERROR** ERRNO: EOPNOTSUPP*/LOCAL STATUS ifIoctl ( char *interfaceName, /* name of the interface, i.e. ei0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -