update copyright date to 2013
[dpdk.git] / lib / librte_kni / rte_kni.h
1 /*-
2  *   BSD LICENSE
3  * 
4  *   Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
5  *   All rights reserved.
6  * 
7  *   Redistribution and use in source and binary forms, with or without 
8  *   modification, are permitted provided that the following conditions 
9  *   are met:
10  * 
11  *     * Redistributions of source code must retain the above copyright 
12  *       notice, this list of conditions and the following disclaimer.
13  *     * Redistributions in binary form must reproduce the above copyright 
14  *       notice, this list of conditions and the following disclaimer in 
15  *       the documentation and/or other materials provided with the 
16  *       distribution.
17  *     * Neither the name of Intel Corporation nor the names of its 
18  *       contributors may be used to endorse or promote products derived 
19  *       from this software without specific prior written permission.
20  * 
21  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
24  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
25  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
26  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
27  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
28  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
29  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
30  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  * 
33  */
34
35 #ifndef _RTE_KNI_H_
36 #define _RTE_KNI_H_
37
38 /**
39  * @file
40  * RTE KNI
41  *
42  * The KNI library provides the ability to create and destroy kernel NIC
43  * interfaces that may be used by the RTE application to receive/transmit
44  * packets from/to Linux kernel net interfaces.
45  *
46  * This library provide two APIs to burst receive packets from KNI interfaces,
47  * and burst transmit packets to KNI interfaces.
48  */
49
50 #include <rte_mbuf.h>
51
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55
56 struct rte_kni;
57
58 /**
59  * Structure which has the function pointers for KNI interface.
60  */
61 struct rte_kni_ops {
62         /* Pointer to function of changing MTU */
63         int (*change_mtu)(uint8_t port_id, unsigned new_mtu);
64
65         /* Pointer to function of configuring network interface */
66         int (*config_network_if)(uint8_t port_id, uint8_t if_up);
67 };
68
69 /**
70  * Create kni interface according to the port id. It will create a paired KNI
71  * interface in the kernel space for each NIC port. The KNI interface created
72  * in the kernel space is the net interface the traditional Linux application
73  * talking to.
74  *
75  * @param port_id
76  *  The port id.
77  * @param pktmbuf_pool
78  *  The mempool for allocting mbufs for packets.
79  * @param mbuf_size
80  *  The mbuf size to store a packet.
81  *
82  * @return
83  *  - The pointer to the context of a kni interface.
84  *  - NULL indicate error.
85  */
86 extern struct rte_kni *rte_kni_create(uint8_t port_id, unsigned mbuf_size,
87                 struct rte_mempool *pktmbuf_pool, struct rte_kni_ops *ops);
88
89 /**
90  * Retrieve a burst of packets from a kni interface. The retrieved packets are
91  * stored in rte_mbuf structures whose pointers are supplied in the array of
92  * mbufs, and the maximum number is indicated by num. It handles the freeing of
93  * the mbufs in the free queue of kni interface.
94  *
95  * @param kni
96  *  The kni interface context.
97  * @param mbufs
98  *  The array to store the pointers of mbufs.
99  * @param num
100  *  The maximum number per burst.
101  *
102  * @return
103  *  The actual number of packets retrieved.
104  */
105 extern unsigned rte_kni_rx_burst(struct rte_kni *kni,
106                 struct rte_mbuf **mbufs, unsigned num);
107
108 /**
109  * Send a burst of packets to a kni interface. The packets to be sent out are
110  * stored in rte_mbuf structures whose pointers are supplied in the array of
111  * mbufs, and the maximum number is indicated by num. It handles allocating
112  * the mbufs for kni interface alloc queue.
113  *
114  * @param kni
115  *  The kni interface context.
116  * @param mbufs
117  *  The array to store the pointers of mbufs.
118  * @param num
119  *  The maximum number per burst.
120  *
121  * @return
122  *  The actual number of packets sent.
123  */
124 extern unsigned rte_kni_tx_burst(struct rte_kni *kni,
125                 struct rte_mbuf **mbufs, unsigned num);
126
127 /**
128  * Get the port id from kni interface.
129  *
130  * @param kni
131  *  The kni interface context.
132  *
133  * @return
134  *  On success: The port id.
135  *  On failure: ~0x0
136  */
137 extern uint8_t rte_kni_get_port_id(struct rte_kni *kni);
138
139 #ifdef __cplusplus
140 }
141 #endif
142
143 #endif /* _RTE_KNI_H_ */
144