]>
Commit | Line | Data |
---|---|---|
0de1b425 WT |
1 | /* |
2 | * Copyright (c) 2018, 2019 Nicira, Inc. | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at: | |
7 | * | |
8 | * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | ||
17 | #ifndef NETDEV_AFXDP_H | |
18 | #define NETDEV_AFXDP_H 1 | |
19 | ||
20 | #ifdef HAVE_AF_XDP | |
21 | ||
22 | #include <stdint.h> | |
23 | #include <stdbool.h> | |
24 | ||
25 | /* These functions are Linux AF_XDP specific, so they should be used directly | |
26 | * only by Linux-specific code. */ | |
27 | ||
e8f56344 IM |
28 | enum afxdp_mode { |
29 | OVS_AF_XDP_MODE_UNSPEC, | |
30 | OVS_AF_XDP_MODE_BEST_EFFORT, | |
31 | OVS_AF_XDP_MODE_NATIVE_ZC, | |
32 | OVS_AF_XDP_MODE_NATIVE, | |
33 | OVS_AF_XDP_MODE_GENERIC, | |
34 | OVS_AF_XDP_MODE_MAX, | |
35 | }; | |
36 | ||
0de1b425 WT |
37 | struct netdev; |
38 | struct xsk_socket_info; | |
39 | struct xdp_umem; | |
40 | struct dp_packet_batch; | |
41 | struct smap; | |
42 | struct dp_packet; | |
43 | struct netdev_rxq; | |
44 | struct netdev_stats; | |
d560bc1b | 45 | struct netdev_custom_stats; |
0de1b425 WT |
46 | |
47 | int netdev_afxdp_rxq_construct(struct netdev_rxq *rxq_); | |
48 | void netdev_afxdp_rxq_destruct(struct netdev_rxq *rxq_); | |
7bf075d9 | 49 | int netdev_afxdp_init(void); |
f627cf1d | 50 | int netdev_afxdp_construct(struct netdev *netdev_); |
0de1b425 | 51 | void netdev_afxdp_destruct(struct netdev *netdev_); |
52b5a5c0 | 52 | int netdev_afxdp_verify_mtu_size(const struct netdev *netdev, int mtu); |
0de1b425 WT |
53 | |
54 | int netdev_afxdp_rxq_recv(struct netdev_rxq *rxq_, | |
55 | struct dp_packet_batch *batch, | |
56 | int *qfill); | |
57 | int netdev_afxdp_batch_send(struct netdev *netdev_, int qid, | |
58 | struct dp_packet_batch *batch, | |
59 | bool concurrent_txq); | |
60 | int netdev_afxdp_set_config(struct netdev *netdev, const struct smap *args, | |
61 | char **errp); | |
62 | int netdev_afxdp_get_config(const struct netdev *netdev, struct smap *args); | |
63 | int netdev_afxdp_get_numa_id(const struct netdev *netdev); | |
64 | int netdev_afxdp_get_stats(const struct netdev *netdev_, | |
65 | struct netdev_stats *stats); | |
d560bc1b IM |
66 | int netdev_afxdp_get_custom_stats(const struct netdev *netdev, |
67 | struct netdev_custom_stats *custom_stats); | |
68 | ||
0de1b425 WT |
69 | |
70 | void free_afxdp_buf(struct dp_packet *p); | |
71 | int netdev_afxdp_reconfigure(struct netdev *netdev); | |
72 | void signal_remove_xdp(struct netdev *netdev); | |
73 | ||
74 | #else /* !HAVE_AF_XDP */ | |
75 | ||
76 | #include "openvswitch/compiler.h" | |
77 | ||
78 | struct dp_packet; | |
79 | ||
80 | static inline void | |
81 | free_afxdp_buf(struct dp_packet *p OVS_UNUSED) | |
82 | { | |
83 | /* Nothing. */ | |
84 | } | |
85 | ||
86 | #endif /* HAVE_AF_XDP */ | |
87 | #endif /* netdev-afxdp.h */ |