Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

net_inject(9f) [opensolaris man page]

net_inject(9F)						   Kernel Functions for Drivers 					    net_inject(9F)

net_inject - determine if a network interface name exists for a network protocol SYNOPSIS
#include <sys/neti.h> int net_inject(const net_data_t net, inject_t style, net_inject_t *packet); INTERFACE LEVEL
Solaris DDI specific (Solaris DDI). PARAMETERS
net value returned from a successful call to net_protocol_lookup(9F). style method that determines how this packet is to be injected into the network or kernel. packet details about the packet to be injected. DESCRIPTION
The net_inject() function provides an interface to allow delivery of network layer (layer 3) packets either into the kernel or onto the network. The method of delivery is determined by style. If NI_QUEUE_IN is specified, the packet is scheduled for delivery up into the kernel, imitating its reception by a network interface. In this mode, packet->ni_addr is ignored and packet->ni_physical specifies the interface for which the packet is made to appear as if it arrived on. If NI_QUEUE_OUT is specified, the packet is scheduled for delivery out of the kernel, as if it were being sent by a raw socket. In this mode, packet->ni_addr and packet->ni_physical are both ignored. Neither NI_QUEUE_IN or NI_QUEUE_OUT cause the packet to be immediately processed by the kernel. Instead, the packet is added to a list and a timeout is scheduled (if there are none already pending) to deliver the packet. The call to net_inject() returns once the setup has been completed, and not after the packet has been processed. The packet processing is completed on a different thread and in a different context to that of the original packet. Thus, a packet queued up using net_inject() for either NI_QUEUE_IN or NI_QUEUE_OUT is presented to the packet event again. A packet received by a hook from NH_PHYSICAL_IN and then queued up with NI_QUEUE_IN is seen by the hook as another NH_PHYSICAL_IN packet. This also applies to both NH_PHYSICAL_OUT and NI_QUEUE_OUT packets. If NI_DIRECT_OUT is specified, an attempt is made to send the packet out to a network interface immediately. No processing on the packet, aside from prepending any required layer 2 information, is made. In this instance, packet->ni_addr may be used to specify the next hop (for the purpose of link layer address resolution) and packet->ni_physical determines which interface the packet should be sent out. For all three packets, packet->ni_packet must point to an mblk structure with the packet to be delivered. See net_inject_t(9S) for more details on the structure net_inject_t. RETURN VALUES
The net_inject() function returns: -1 The network protocol does not support this function. 0 The packet is successfully queued or sent. 1 The packet could not be queued up or sent out immediately. CONTEXT
The net_inject() function may be called from user, kernel, or interrupt context. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Availability |SUNWcsu | +-----------------------------+-----------------------------+ |Interface Stability |Committed | +-----------------------------+-----------------------------+ SEE ALSO
net_protocol_lookup(9F), netinfo(9F), net_inject_t(9S) SunOS 5.11 1 May 2008 net_inject(9F)

Check Out this Related Man Page


pcap_inject, pcap_sendpacket - transmit a packet SYNOPSIS
#include <pcap/pcap.h> int pcap_inject(pcap_t *p, const void *buf, size_t size); int pcap_sendpacket(pcap_t *p, const u_char *buf, int size); DESCRIPTION
pcap_inject() sends a raw packet through the network interface; buf points to the data of the packet, including the link-layer header, and size is the number of bytes in the packet. Note that, even if you successfully open the network interface, you might not have permission to send packets on it, or it might not sup- port sending packets; as pcap_open_live() doesn't have a flag to indicate whether to open for capturing, sending, or capturing and sending, you cannot request an open that supports sending and be notified at open time whether sending will be possible. Note also that some devices might not support sending packets. Note that, on some platforms, the link-layer header of the packet that's sent might not be the same as the link-layer header of the packet supplied to pcap_inject(), as the source link-layer address, if the header contains such an address, might be changed to be the address assigned to the interface on which the packet it sent, if the platform doesn't support sending completely raw and unchanged packets. Even worse, some drivers on some platforms might change the link-layer type field to whatever value libpcap used when attaching to the device, even on platforms that do nominally support sending completely raw and unchanged packets. pcap_sendpacket() is like pcap_inject(), but it returns 0 on success, rather than returning the number of bytes written. (pcap_inject() comes from OpenBSD; pcap_sendpacket() comes from WinPcap. Both are provided for compatibility.) RETURN VALUE
pcap_inject() returns the number of bytes written on success and -1 on failure. pcap_sendpacket() returns 0 on success and -1 on failure. If -1 is returned, pcap_geterr() or pcap_perror() may be called with p as an argument to fetch or display the error text. SEE ALSO
pcap(3PCAP), pcap_geterr(3PCAP) 5 April 2008 PCAP_INJECT(3PCAP)
Man Page