⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arplib.c

📁 vxworks的完整的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* arpLib.c - Address Resolution Protocol (ARP) table manipulation library *//* Copyright 1984 - 2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02q,10may02,kbw  making man page edits02p,24apr02,rae  Added note about arp flooding to arpResolve(), etc. (SPR #69412)02o,07dec01,rae  merge from synth ver 02x (SPR #69889)02n,15oct01,rae  merge from truestack ver 02w base 02j (SPRs 69405, 65783, etc.)02m,07feb01,spm  added merge record for 30jan01 update from version 02l of                 tor2_0_x branch (base 02j) and fixed modification history;                 fixed code conventions and updated documentation; replaced                 printed error message with errno value02l,30jan01,ijm  merged SPR# 28602 fixes: proxy ARP services are obsolete 02k,05feb99,dgp  document errno values02j,16apr97,vin  changed SOCK_DGRAM to SOCK_RAW as udp can be scaled out.02i,11aug93,jmm  Changed ioctl.h and socket.h to sys/ioctl.h and sys/socket.h02h,21sep92,jdi  documentation cleanup. 02g,14aug92,elh  documentation changes. 02f,11jun92,elh  changed parameter to arpCmd.  Moved arpShow to netShow.02e,26may92,rrr  the tree shuffle		  -changed includes to have absolute path from h/02d,19apr92,elh  added spl pair around arpFlush.02c,04apr92,elh  added arpFlush.02b,03jan92,elh  ansi-fied.02a,18nov91,elh  major overhaul.  Rewrote to comply with WRS standards and		 coding conventions, added error handling and documentation.01a,06jun91,jrb  written.*//*DESCRIPTIONThis library provides direct access to the address translation tablemaintained by the Address Resolution Protocol (ARP). Each entry inthe table maps an Internet Protocol (IP) address to a physical hardware address. This library supports only those entries that translate between IP and Ethernet addresses. It is linked into the VxWorks image if INCLUDE_ARP is defined at the time the image is built. The underlying ARP protocol, which creates and maintains the table, is included automatically as part of the IP component.RELATED INTERFACESThe arpShow() routine (in the netShow library) displays the current contents of the ARP table.A low -evel interface to the ARP table is available with the socket-specific SIOCSARP, SIOCDARP and SIOCGARP ioctl functions.INTERNALThe structure chart for this module looks like:     arpAdd	arpDelete	|   \ 	  /	|    v   v        |    arpCmd	vetherAsciiToEnetINCLUDE FILES: arpLib.hSEE ALSO: inetLib, routeLib, netShow*//* includes */#include "vxWorks.h"#include "sys/types.h"#include "sys/socket.h"#include "sys/ioctl.h"#include "net/if.h"#include "netinet/if_ether.h"#include "net/if_arp.h"#include "net/unixLib.h"#include "errno.h"#include "arpLib.h"#include "inetLib.h"#include "stdio.h"#include "string.h"#include "sockLib.h"#include "ioLib.h"#include "unistd.h"#include "hostLib.h"#include "netShow.h"#include "taskLib.h"#ifdef VIRTUAL_STACK#ifdef _WRS_VXWORKS_5_X#include "memPartLib.h"#endif /* _WRS_VXWORKS_5_X */#include "netinet/vsLib.h"#include "netinet/vsArp.h"extern void arptimer (int);#endif/* defines */#define ENET_SIZE		6		/* Ethernet address size *//* forward static functions */LOCAL STATUS etherAsciiToEnet (char * asciiAddr, u_char * retEnet);IMPORT void arptfree ();#ifndef VIRTUAL_STACKIMPORT struct llinfo_arp llinfo_arp;#endif/********************************************************************************* arpLibInit - ARP table manipulation library initialization** This routine is called during system startup if INCLUDE_ARP_API is defined. * Normally, its only purpose is to automatically link this module into the* runtime image. The virtual stack modifications extend this routine to* initialize the required variables and start the appropriate timer.** RETURNS: N/A** ERRNO: N/A** NOMANUAL*/void arpLibInit (void)    {#ifdef VIRTUAL_STACK    /*     * Make sure arpLibInit has not been called before. This can happen     * when INCLUDE_ARP_API has been included in a build.     */    if (arptimerWd == NULL)	{        _llinfo_arp.la_next = &_llinfo_arp;        _llinfo_arp.la_prev = &_llinfo_arp;        arpRxmitTicks = -1;        arptimerWd = wdCreate ();        arptimer(myStackNum);	}#endif /* VIRTUAL_STACK */    return;    }/********************************************************************************* arpAdd - create or modify an ARP table entry** This routine assigns an Ethernet address to an IP address in the ARP table.* The <pHost> parameter specifies the host by name or by Internet address * using standard dotted decimal notation. The <pEther> parameter provides the * Ethernet address as six hexadecimal bytes (between 0 and ff) separated by * colons. A new entry is created for the specified host if necessary.* Otherwise, the existing entry is changed to use the given Ethernet address.** The <flags> parameter combines any of the following options: * .iP "ATF_PERM  (0x04)"* Create a permanent ARP entry which will not time out.* .iP "ATF_PUBL  (0x08)"* Publish this entry. The host will respond to ARP requests even if the* <pHost> parameter does not match a local IP address. This setting provides * a limited form of proxy ARP.* .iP "ATF_PROXY (0x10)"* Use a "wildcard" hardware address. The proxy server uses this setting to* support multiple proxy networks. The entry always supplies the hardware* address of the sending interface.* * EXAMPLE* Create a permanent ARP table entry for the host named "myHost" with* Ethernet address 0:80:f9:1:2:3:* .CS*     arpAdd ("myHost", "0:80:f9:1:2:3", 0x4);* .CE** Assuming "myHost" has the Internet address "90.0.0.3", the following call* changes the Ethernet address to 0:80:f9:1:2:4. No additional flags are set * for that entry.* .CS*     arpAdd ("90.0.0.3", "0:80:f9:1:2:4", 0);* .CE** RETURNS: OK, or ERROR if unsuccessful.** ERRNO:*  S_arpLib_INVALID_ARGUMENT*  S_arpLib_INVALID_HOST*  S_arpLib_INVALID_ENET_ADDRESS*  S_arpLib_INVALID_FLAG*  or results of low-level ioctl call.*/STATUS arpAdd    (    char *		pHost,		/* host name or IP address */    char *		pEther,		/* Ethernet address */    int  		flags     	/* ARP flags */    )    {    struct in_addr	hostAddr;	/* host address	*/    u_char 		ea [ENET_SIZE];	/* Ethernet address */#ifdef VIRTUAL_STACK    virtualStackIdCheck();#endif /* VIRTUAL_STACK */    if ((pHost == NULL) || (pEther == NULL)) 	/* validate parameters */	{	errno = S_arpLib_INVALID_ARGUMENT;	return (ERROR);	}						/* convert address from ascii */    if (((hostAddr.s_addr = inet_addr (pHost)) == ERROR) &&	((hostAddr.s_addr = hostGetByName (pHost)) == ERROR))	{	errno = S_arpLib_INVALID_HOST;	return (ERROR);	}						/* convert enet from ascii */    if (etherAsciiToEnet (pEther, ea) != OK)	return (ERROR);						/* validate flags */    if (flags & ~(ATF_PERM | ATF_PUBL | ATF_INCOMPLETE | ATF_PROXY))	{	errno = S_arpLib_INVALID_FLAG;	return (ERROR);	}    if (arpCmd (SIOCSARP, &hostAddr, ea, &flags) == ERROR)	return (ERROR);    return (OK);    }/********************************************************************************* arpDelete - remove an ARP table entry** This routine deletes an ARP table entry. The <pHost> parameter indicates* the target entry using the host name or Internet address.** EXAMPLE* .CS*    arpDelete ("91.0.0.3")*    arpDelete ("myHost")* .CE** RETURNS: OK, or ERROR if unsuccessful.** ERRNO*  S_arpLib_INVALID_ARGUMENT*  S_arpLib_INVALID_HOST*/STATUS arpDelete    (    char *		pHost			/* host name or IP address */    )    {    struct in_addr 	hostAddr;		/* host address 	*/    char		addrInAscii [ INET_ADDR_LEN ]; /* IP in ascii	*/#ifdef VIRTUAL_STACK    virtualStackIdCheck();#endif /* VIRTUAL_STACK */    if (pHost == NULL)				/* validate argument */	{	errno = S_arpLib_INVALID_ARGUMENT;	return (ERROR);	}						/* convert addr from ascii */    if (((hostAddr.s_addr = inet_addr (pHost)) == ERROR) &&	((hostAddr.s_addr = hostGetByName (pHost)) == ERROR))	{        errno = S_arpLib_INVALID_HOST;	return (ERROR);	}    inet_ntoa_b (hostAddr, addrInAscii);	/* convert to printable fmt */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -