The Network kernel services are divided into:
The Address Family Domain and Network Interface Device Driver services enable address family domains (Protocols) and network interface drivers to add and remove themselves from network switch tables.
The if_attach service and if_detach services add and remove network interfaces from the Network Interface List. Protocols search this list to determine an appropriate interface on which to transmit a packet.
Protocols use the add_input_type and del_input_type services to notify network interface drivers that the protocol is available to handle packets of a certain type. The Network Interface Driver uses the find_input_type service to distribute packets to a protocol.
The add_netisr and del_netisr services add and delete network software interrupt handlers. Address families add and delete themselves from the Address Family Domain switch table by using the add_domain_af and del_domain_af services. The Address Family Domain switch table is a list of all available protocols that can be used in the socket subroutine.
The Address Family Domain and Network Interface Device Driver services are:
add_domain_af | Adds an address family to the Address Family domain switch table. |
add_input_type | Adds a new input type to the Network Input table. |
add_netisr | Adds a network software interrupt service to the Network Interrupt table. |
del_domain_af | Deletes an address family from the Address Family domain switch table. |
del_input_type | Deletes an input type from the Network Input table. |
del_netisr | Deletes a network software interrupt service routine from the Network Interrupt table. |
find_input_type | Finds the given packet type in the Network Input Interface switch table and distributes the input packet according to the table entry for that type. |
if_attach | Adds a network interface to the network interface list. |
if_detach | Deletes a network interface from the network interface list. |
ifunit | Returns a pointer to the ifnet structure of the requested interface. |
schednetisr | Schedules or invokes a network software interrupt service routine. |
The Routing and Interface Address services provide protocols with a means of establishing, accessing, and removing routes to remote hosts or gateways. Routes bind destinations to a particular network interface.
The interface address services accept a destination address or network and return an associated interface address. Protocols use these services to determine if an address is on a directly connected network.
The Routing and Interface Address services are:
ifa_ifwithaddr | Locates an interface based on a complete address. |
ifa_ifwithdstaddr | Locates the point-to-point interface with a given destination address. |
ifa_ifwithnet | Locates an interface on a specific network. |
if_down | Marks an interface as down. |
if_nostat | Zeroes statistical elements of the interface array in preparation for an attach operation. |
rtalloc | Allocates a route. |
rtfree | Frees the routing table entry |
rtinit | Sets up a routing table entry, typically for a network interface. |
rtredirect | Forces a routing table entry with the specified destination to go through the given gateway. |
rtrequest | Carries out a request to change the routing table. |
The Loopback services enable networking code to be exercised without actually transmitting packets on a network. This is a useful tool for developing new protocols without introducing network variables. Loopback services can also be used to send packets to local addresses without using hardware loopback.
The Loopback services are:
loifp | Returns the address of the software loopback interface structure. |
looutput | Sends data through a software loopback interface. |
Protocol kernel services provide a means of finding a particular address family as well as a raw protocol handler. The raw protocol handler basically passes raw packets up through sockets so that a protocol can be implemented in user space.
The Protocol kernel services are:
pfctlinput | Starts the ctlinput function for each configured protocol. |
pffindproto | Returns the address of a protocol switch table entry. |
raw_input | Builds a raw_header structure for a packet and sends both to the raw protocol handler. |
raw_usrreq | Implements user requests for raw protocols. |
The Communications Device Handler Interface services provide a standard interface between network interface drivers and communications device handlers. The net_attach and net_detach services open and close the device handler. Once the device handler has been opened, the net_xmit service can be used to transmit packets. Asynchronous start done notifications are recorded by the net_start_done service. The net_error service handles error conditions.
The Communications Device Handler Interface services are:
add_netopt | This macro adds a network option structure to the list of network options. |
del_netopt | This macro deletes a network option structure from the list of network options. |
net_attach | Opens a communications I/O device handler. |
net_detach | Closes a communications I/O device handler. |
net_error | Handles errors for communication network interface drivers. |
net_sleep | Sleeps on the specified wait channel. |
net_start | Starts network IDs on a communications I/O device handler. |
net_start_done | Starts the done notification handler for communications I/O device handlers. |
net_wakeup | Wakes up all sleepers waiting on the specified wait channel. |
net_xmit | Transmits data using a communications I/O device handler. |
net_xmit_trace | Traces transmit packets. This kernel service was added for those network interfaces that do not use the net_xmit kernel service to trace transmit packets. |