===========================
"Raw" packet socket support
===========================

Packet sockets (:c:macro:`AF_PACKET`) allow receiving and transmitting frames
without a transport protocol in between. Frames received are copied into a
packet socket tap before they enter the network. Data written into a packet
socket will bypass the network altogether and be placed in the transmission
buffer of the network interface driver.

Configuration Options
=====================

``CONFIG_NET_PKT_PREALLOC_CONNS``
  Number of preallocated packet connections (all tasks).
``CONFIG_NET_PKT_ALLOC_CONNS``
  Dynamic memory allocations for packet connections.
``CONFIG_NET_PKT_MAX_CONNS``
  Maximum number of packet connections.

Usage
=====

.. code-block:: c

  struct sockaddr_ll addr;
  uint8_t buffer[BUFSIZE];
  int sd = socket(AF_PACKET, SOCK_RAW, 0); /* Create a packet socket */

  addr.sll_family = AF_PACKET;
  addr.sll_ifindex = if_nametoindex("eth0");
  bind(sd, (FAR struct sockaddr *)&addr, sizeof(addr)); /* Bind to device */

  recv(sd, buffer, sizeof(buffer), 0); /* read(sd, buffer, sizeof(buffer)); */
  send(sd, buffer, sizeof(buffer), 0); /* write(sd, buffer, sizeof(buffer)); */

  close(sd); /* Close the socket */