linux/include/xen/interface/io/netif.h
<<
>>
Prefs
   1/******************************************************************************
   2 * netif.h
   3 *
   4 * Unified network-device I/O interface for Xen guest OSes.
   5 *
   6 * Copyright (c) 2003-2004, Keir Fraser
   7 */
   8
   9#ifndef __XEN_PUBLIC_IO_NETIF_H__
  10#define __XEN_PUBLIC_IO_NETIF_H__
  11
  12#include "ring.h"
  13#include "../grant_table.h"
  14
  15/*
  16 * Notifications after enqueuing any type of message should be conditional on
  17 * the appropriate req_event or rsp_event field in the shared ring.
  18 * If the client sends notification for rx requests then it should specify
  19 * feature 'feature-rx-notify' via xenbus. Otherwise the backend will assume
  20 * that it cannot safely queue packets (as it may not be kicked to send them).
  21 */
  22
  23/*
  24 * This is the 'wire' format for packets:
  25 *  Request 1: netif_tx_request -- NETTXF_* (any flags)
  26 * [Request 2: netif_tx_extra]  (only if request 1 has NETTXF_extra_info)
  27 * [Request 3: netif_tx_extra]  (only if request 2 has XEN_NETIF_EXTRA_MORE)
  28 *  Request 4: netif_tx_request -- NETTXF_more_data
  29 *  Request 5: netif_tx_request -- NETTXF_more_data
  30 *  ...
  31 *  Request N: netif_tx_request -- 0
  32 */
  33
  34/* Protocol checksum field is blank in the packet (hardware offload)? */
  35#define _NETTXF_csum_blank     (0)
  36#define  NETTXF_csum_blank     (1U<<_NETTXF_csum_blank)
  37
  38/* Packet data has been validated against protocol checksum. */
  39#define _NETTXF_data_validated (1)
  40#define  NETTXF_data_validated (1U<<_NETTXF_data_validated)
  41
  42/* Packet continues in the next request descriptor. */
  43#define _NETTXF_more_data      (2)
  44#define  NETTXF_more_data      (1U<<_NETTXF_more_data)
  45
  46/* Packet to be followed by extra descriptor(s). */
  47#define _NETTXF_extra_info     (3)
  48#define  NETTXF_extra_info     (1U<<_NETTXF_extra_info)
  49
  50struct xen_netif_tx_request {
  51    grant_ref_t gref;      /* Reference to buffer page */
  52    uint16_t offset;       /* Offset within buffer page */
  53    uint16_t flags;        /* NETTXF_* */
  54    uint16_t id;           /* Echoed in response message. */
  55    uint16_t size;         /* Packet size in bytes.       */
  56};
  57
  58/* Types of netif_extra_info descriptors. */
  59#define XEN_NETIF_EXTRA_TYPE_NONE  (0)  /* Never used - invalid */
  60#define XEN_NETIF_EXTRA_TYPE_GSO   (1)  /* u.gso */
  61#define XEN_NETIF_EXTRA_TYPE_MAX   (2)
  62
  63/* netif_extra_info flags. */
  64#define _XEN_NETIF_EXTRA_FLAG_MORE (0)
  65#define XEN_NETIF_EXTRA_FLAG_MORE  (1U<<_XEN_NETIF_EXTRA_FLAG_MORE)
  66
  67/* GSO types - only TCPv4 currently supported. */
  68#define XEN_NETIF_GSO_TYPE_TCPV4        (1)
  69
  70/*
  71 * This structure needs to fit within both netif_tx_request and
  72 * netif_rx_response for compatibility.
  73 */
  74struct xen_netif_extra_info {
  75        uint8_t type;  /* XEN_NETIF_EXTRA_TYPE_* */
  76        uint8_t flags; /* XEN_NETIF_EXTRA_FLAG_* */
  77
  78        union {
  79                struct {
  80                        /*
  81                         * Maximum payload size of each segment. For
  82                         * example, for TCP this is just the path MSS.
  83                         */
  84                        uint16_t size;
  85
  86                        /*
  87                         * GSO type. This determines the protocol of
  88                         * the packet and any extra features required
  89                         * to segment the packet properly.
  90                         */
  91                        uint8_t type; /* XEN_NETIF_GSO_TYPE_* */
  92
  93                        /* Future expansion. */
  94                        uint8_t pad;
  95
  96                        /*
  97                         * GSO features. This specifies any extra GSO
  98                         * features required to process this packet,
  99                         * such as ECN support for TCPv4.
 100                         */
 101                        uint16_t features; /* XEN_NETIF_GSO_FEAT_* */
 102                } gso;
 103
 104                uint16_t pad[3];
 105        } u;
 106};
 107
 108struct xen_netif_tx_response {
 109        uint16_t id;
 110        int16_t  status;       /* NETIF_RSP_* */
 111};
 112
 113struct xen_netif_rx_request {
 114        uint16_t    id;        /* Echoed in response message.        */
 115        grant_ref_t gref;      /* Reference to incoming granted frame */
 116};
 117
 118/* Packet data has been validated against protocol checksum. */
 119#define _NETRXF_data_validated (0)
 120#define  NETRXF_data_validated (1U<<_NETRXF_data_validated)
 121
 122/* Protocol checksum field is blank in the packet (hardware offload)? */
 123#define _NETRXF_csum_blank     (1)
 124#define  NETRXF_csum_blank     (1U<<_NETRXF_csum_blank)
 125
 126/* Packet continues in the next request descriptor. */
 127#define _NETRXF_more_data      (2)
 128#define  NETRXF_more_data      (1U<<_NETRXF_more_data)
 129
 130/* Packet to be followed by extra descriptor(s). */
 131#define _NETRXF_extra_info     (3)
 132#define  NETRXF_extra_info     (1U<<_NETRXF_extra_info)
 133
 134struct xen_netif_rx_response {
 135    uint16_t id;
 136    uint16_t offset;       /* Offset in page of start of received packet  */
 137    uint16_t flags;        /* NETRXF_* */
 138    int16_t  status;       /* -ve: BLKIF_RSP_* ; +ve: Rx'ed pkt size. */
 139};
 140
 141/*
 142 * Generate netif ring structures and types.
 143 */
 144
 145DEFINE_RING_TYPES(xen_netif_tx,
 146                  struct xen_netif_tx_request,
 147                  struct xen_netif_tx_response);
 148DEFINE_RING_TYPES(xen_netif_rx,
 149                  struct xen_netif_rx_request,
 150                  struct xen_netif_rx_response);
 151
 152#define NETIF_RSP_DROPPED         -2
 153#define NETIF_RSP_ERROR           -1
 154#define NETIF_RSP_OKAY             0
 155/* No response: used for auxiliary requests (e.g., netif_tx_extra). */
 156#define NETIF_RSP_NULL             1
 157
 158#endif
 159