Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
OTARPModule.h
/* |
File: OTARPModule.h |
Contains: Types and constants to interface to the OT ARP module. |
Written by: Quinn "The Eskimo!" |
Copyright: Copyright © 1997-1999 by Apple Computer, Inc., All Rights Reserved. |
You may incorporate this Apple sample source code into your program(s) without |
restriction. This Apple sample source code has been provided "AS IS" and the |
responsibility for its operation is yours. You are not permitted to redistribute |
this Apple sample source code as "Apple sample source code" after having made |
changes. If you're going to re-distribute the source, we require that you make |
it clear in the source that the code was descended from Apple sample source |
code, but that you've made changes. |
Change History (most recent first): |
7/21/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1 |
*/ |
#if PRAGMA_ALIGN_SUPPORTED |
#pragma options align=mac68k |
#endif |
/////////////////////////////////////////////////////////////////// |
// Pick up the standard UInt32 types. |
#include <Types.h> |
// Pick up the MIOC_CMD macro. |
#include <OpenTransport.h> |
// Pick up queue_t. |
#include <mistream.h> |
// Pick up the MIOC_ARP constants. |
// #include <miioccom.h> |
// This constant is actually defined in <miioccom.h>, but |
// commented out for some reason )-: |
#define MIOC_ARP 'h' /* ioctl's for Mentat's arp module */ |
/////////////////////////////////////////////////////////////////// |
// ARP Command Structures |
// arc_t is the standard header for all ARP command structures. |
// The structure you should use is determined by the arc_cmd |
// field. See the command constants for details of which |
// structures to use with which commands.. |
typedef struct { |
UInt32 arc_cmd; |
UInt32 arc_name_offset; |
UInt32 arc_name_length; |
UInt32 arc_proto; |
UInt32 arc_proto_addr_offset; |
UInt32 arc_proto_addr_length; |
UInt32 arc_flags; |
queue_t * arc_client_q; /* context save area for client module */ |
} arc_t; |
typedef struct { |
arc_t area_arc; |
UInt32 area_proto_mask_offset; |
UInt32 area_hw_addr_offset; |
UInt32 area_hw_addr_length; |
} area_t; |
typedef struct { |
arc_t areq_arc; |
UInt32 areq_sender_addr_offset; |
UInt32 areq_sender_addr_length; |
UInt32 areq_xmit_count; /* 0 ==> cache lookup only */ |
UInt32 areq_xmit_interval; /* # of milliseconds; 0: default */ |
UInt32 areq_max_buffered; /* # ofquests to buffer; 0: default */ |
UInt8 areq_sap[8]; /* to insert in returned template */ |
} areq_t; |
typedef struct { |
arc_t arma_arc; |
UInt32 arma_proto_mask_offset; |
UInt32 arma_proto_extract_mask_offset; |
UInt32 arma_hw_addr_offset; |
UInt32 arma_hw_addr_length; |
UInt32 arma_hw_mapping_start; /* Offset to start of the mask&proto_addr */ |
} arma_t; |
// ARP Command Codes for use in the arc_cmd field of arc_t, |
// along with the true structures you should use. |
#define AR_ENTRY_ADD MIOC_CMD(MIOC_ARP,1) |
// Add an ARP cache entry. |
// Use area_t structure. |
// In: |
// area_arc.arc_cmd = AR_ENTRY_ADD |
// area_arc.arc_name_offset = offset to name of interface |
// area_arc.arc_name_length = length of name of interface (including zero terminator) |
// area_arc.arc_proto = ARP protocol type (eg IP_ARP_PROTO_TYPE) |
// area_arc.arc_proto_addr_offset = offset to protocol address to look up (eg an InetHost) |
// area_arc.arc_proto_addr_offset = length of protocol address to look up (eg sizeof(InetHost)) |
// area_arc.arc_flags = flags for this cache entry (see below) |
// area_proto_mask_offset = offset to a protocol address mask (usually $FFFFFFFF) |
// area_hw_addr_offset = offset to hardware address |
// area_hw_addr_length = length of hardware address (eg 6) |
#define AR_MAPPING_ADD MIOC_CMD(MIOC_ARP,7) |
// Use arma_t structure. |
#define AR_ENTRY_DELETE MIOC_CMD(MIOC_ARP,2) |
// Delete an entry in the ARP cache. |
// Use arc_t structure. |
// In: |
// arc_cmd = AR_ENTRY_DELETE |
// arc_name_offset = offset to name of interface |
// arc_name_length = length of name of interface (including zero terminator) |
// arc_proto = ARP protocol type (eg IP_ARP_PROTO_TYPE) |
// arc_proto_addr_offset = offset to protocol address to delete (eg an InetHost) |
// arc_proto_addr_length = length of protocol address to delete (eg sizeof(InetHost)) |
#define AR_ENTRY_QUERY MIOC_CMD(MIOC_ARP,3) |
// Look for an entry, either in the cache or by talking on the network. |
// Use areq_t structure. |
// In: |
// areq_arc.arc_cmd = AR_ENTRY_QUERY |
// areq_arc.arc_name_offset = offset to name of interface |
// areq_arc.arc_name_length = length of name of interface (including zero terminator) |
// areq_arc.arc_proto = ARP protocol type (eg IP_ARP_PROTO_TYPE) |
// areq_arc.arc_proto_addr_offset = offset to protocol address to look up (eg an InetHost) |
// areq_arc.arc_proto_addr_offset = length of protocol address to look up (eg sizeof(InetHost)) |
// areq_sender_addr_offset = offset to protocol address of sender (eg an InetHost) |
// areq_sender_addr_length = length of protocol address of sender (eg sizeof(InetHost)) |
// areq_xmit_count = number of transmissions before giving up (use 0 for a straight cache lookup) |
// areq_xmit_interval = number of milliseconds between transmissions (0 gives a sensible default) |
// areq_max_buffered = number of requests to buffer (0 gives a sensible default) |
// areq_sap = a SAP to insert into the returned response |
// Out: |
// The output is in the form of a DLPI message that you can |
// use as the header to a message to the requested host. |
#define AR_ENTRY_SQUERY MIOC_CMD(MIOC_ARP,6) |
// Look for an entry in the ARP cache. |
// Use area_t structure. |
// In: |
// area_arc.arc_cmd = AR_ENTRY_SQUERY |
// area_arc.arc_name_offset = offset to name of interface |
// area_arc.arc_name_length = length of name of interface (including zero terminator) |
// area_arc.arc_proto = ARP protocol type (eg IP_ARP_PROTO_TYPE) |
// area_arc.arc_proto_addr_offset = offset to protocol address to look up (eg an InetHost) |
// area_arc.arc_proto_addr_offset = length of protocol address to look up (eg sizeof(InetHost)) |
// area_hw_addr_offset = offset to buffer to store hardware address |
// area_hw_addr_length = length of buffer to store hardware address (eg 6) |
// Out: |
// area_arc.arc_flags = flags for this entry |
// buffer pointed to by area_hw_addr_offset and area_hw_addr_length = hardware address |
#define AR_XMIT_REQUEST MIOC_CMD(MIOC_ARP,4) |
// Use arc_t structure. |
#define AR_XMIT_RESPONSE MIOC_CMD(MIOC_ARP,11) |
// Use arc_t structure. |
#define AR_INTERFACE_UP MIOC_CMD(MIOC_ARP,9) |
// Bring an ARPing interface up. |
// Use arc_t structure. |
// In: |
// arc_cmd = AR_INTERFACE_UP |
// arc_name_offset = offset to name of interface |
// arc_name_length = length of name of interface (including zero terminator) |
#define AR_INTERFACE_DOWN MIOC_CMD(MIOC_ARP,10) |
// Tear an ARPing interface down. |
// Use arc_t structure. |
// In: |
// arc_cmd = AR_INTERFACE_DOWN |
// arc_name_offset = offset to name of interface |
// arc_name_length = length of name of interface (including zero terminator) |
// Flags used in the arc_flags field of arc_t. |
#define ACE_F_PERMANENT 0x1 // This entry will not time out. |
#define ACE_F_PUBLISH 0x2 // ARP will respond to incoming ARP requests for this entry |
#define ACE_F_DYING 0x4 // This entry is going away very soon. |
#define ACE_F_RESOLVED 0x8 // This entry is valid. |
#define ACE_F_MAPPING 0x10 // Use bit mask on target address. |
// The protocol value for IP ARPs, for use in the arc_proto field of the arc_t. |
#define IP_ARP_PROTO_TYPE 0x0800 |
#if PRAGMA_ALIGN_SUPPORTED |
#pragma options align=reset |
#endif |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-07-22