Myricom logo

snf.h
1 /*************************************************************************
2  * The contents of this file are subject to the MYRICOM SNIFFER10G
3  * LICENSE (the "License"); User may not use this file except in
4  * compliance with the License. The full text of the License can found
5  * in LICENSE.TXT
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
9  * the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * Copyright 2008-2009 by Myricom, Inc. All rights reserved.
13  ***********************************************************************/
14 
102 #ifndef _snf_h
103 #define _snf_h
104 
105 #ifndef MAL_KERNEL
106 #ifndef _WIN32
107 #include <stdint.h>
108 #else /* _WIN32 */
109 typedef signed __int8 int8_t;
110 typedef signed __int16 int16_t;
111 typedef signed __int32 int32_t;
112 typedef signed __int64 int64_t;
113 typedef unsigned __int8 uint8_t;
114 typedef unsigned __int16 uint16_t;
115 typedef unsigned __int32 uint32_t;
116 typedef unsigned __int64 uint64_t;
117 #ifdef _M_IX86
118 typedef unsigned __int32 uintptr_t;
119 #else
120 typedef unsigned __int64 uintptr_t;
121 #endif
122 #endif /* _WIN32 */
123 #else
124 #include "mal_int.h"
125 #endif
126 
127 #ifdef __cplusplus
128 extern "C"
129 {
130 #endif
131 
132 /**********************************************************************/
133 /* Control import/export of symbols and calling convention. */
134 /**********************************************************************/
135 #ifndef _WIN32
136 # define SNF_FUNC(type) type
137 # define SNF_VAR(type) type
138 #else
139 # ifdef SNF_BUILDING_LIB
140 # ifdef __cplusplus
141 # define SNF_FUNC(type) extern "C" __declspec(dllexport) type __cdecl
142 # define SNF_VAR(type) extern "C" __declspec(dllexport) type
143 # else
144 # define SNF_FUNC(type) __declspec(dllexport) type __cdecl
145 # define SNF_VAR(type) __declspec(dllexport) type
146 # endif
147 # else
148 # ifdef __cplusplus
149 # define SNF_FUNC(type) extern "C" __declspec(dllimport) type __cdecl
150 # define SNF_VAR(type) extern "C" __declspec(dllimport) type
151 # else
152 # define SNF_FUNC(type) __declspec(dllimport) type __cdecl
153 # define SNF_VAR(type) __declspec(dllimport) type
154 # endif
155 # endif
156 #endif
157 
339 #define SNF_VERSION_API 8
340 
345 typedef struct snf_handle *snf_handle_t;
346 
359 SNF_FUNC(int) snf_init(uint16_t api_version); /* must be SNF_VERSION_API */
360 
389 SNF_FUNC(int) snf_set_app_id(int32_t id);
390 
394 enum snf_link_state { SNF_LINK_DOWN = 0, SNF_LINK_UP = 1 };
395 
409 };
410 
412 struct snf_ifaddrs {
414  const char *snf_ifa_name;
415  uint32_t snf_ifa_portnum;
416 #define snf_ifa_boardnum snf_ifa_portnum
418  uint8_t snf_ifa_macaddr[6];
419  uint8_t pad[2];
424 };
425 
440 SNF_FUNC(int) snf_getifaddrs(struct snf_ifaddrs **ifaddrs_o);
441 
447 SNF_FUNC(void) snf_freeifaddrs(struct snf_ifaddrs *ifaddrs);
448 
460 SNF_FUNC(int) snf_getportmask_valid(uint32_t *mask_o, int *cnt_o);
461 
476 SNF_FUNC(int) snf_getportmask_linkup(uint32_t *mask_o, int *cnt_o);
477 
478 struct snf_recv_req;
479 
488 };
489 
506  SNF_RSS_IP = 0x01,
509  SNF_RSS_GTP = 0x40,
510  SNF_RSS_GRE = 0x80,
511 };
512 #define SNF_RSS_IPV4 SNF_RSS_IP
520 struct snf_rss_mode_function {
575  int (*rss_hash_fn)(struct snf_recv_req *r, void *context,
576  uint32_t *hashval);
579  void *rss_context;
580 };
581 
610 struct snf_rss_params {
612  union {
615  } params;
616 };
633 #define SNF_F_PSHARED 0x1
644 #define SNF_F_AGGREGATE_PORTMASK 0x2
657 #define SNF_F_RX_DUPLICATE 0x300
724 SNF_FUNC(int) snf_open(uint32_t portnum,
725  int num_rings,
726  const struct snf_rss_params *rss_params,
727  int64_t dataring_sz,
728  int flags,
729  snf_handle_t *devhandle);
730 
731 
759 SNF_FUNC(int) snf_open_defaults(uint32_t portnum, snf_handle_t *devhandle);
760 
771 SNF_FUNC(int) snf_start(snf_handle_t devhandle);
772 
786 SNF_FUNC(int) snf_stop(snf_handle_t devhandle);
787 
798 SNF_FUNC(int) snf_get_link_state(snf_handle_t devhandle, enum snf_link_state *state);
799 
810 SNF_FUNC(int) snf_get_timesource_state(snf_handle_t devhandle,
811  enum snf_timesource_state *state);
812 
823 SNF_FUNC(int) snf_get_link_speed(snf_handle_t devhandle, uint64_t *speed);
824 
841 SNF_FUNC(int) snf_close(snf_handle_t devhandle);
842 
848 typedef struct snf_ring *snf_ring_t;
868 SNF_FUNC(int) snf_ring_open(snf_handle_t devhandle, snf_ring_t *ringh);
869 
892 SNF_FUNC(int) snf_ring_open_id(snf_handle_t devhandle, int ring_id, snf_ring_t *ringh);
893 
912 SNF_FUNC(int) snf_ring_close(snf_ring_t ringh);
913 
917 struct snf_recv_req {
918  void *pkt_addr;
919  uint32_t length;
920  uint64_t timestamp;
921  uint32_t portnum;
922  uint32_t length_data;
923  uint32_t hw_hash;
924 };
925 
963 SNF_FUNC(int) snf_ring_recv(snf_ring_t ringh, int timeout_ms, struct snf_recv_req *recv_req);
964 
966 struct snf_ring_qinfo {
967  uintptr_t q_avail;
968  uintptr_t q_borrowed;
969  uintptr_t q_free;
970 };
971 
973 struct snf_ring_portinfo {
975  uintptr_t q_size;
976  uint32_t portcnt;
977  uint32_t portmask;
978  uintptr_t data_addr;
979  uintptr_t data_size;
980 };
981 
986 SNF_FUNC(int)
987 snf_ring_portinfo_count(snf_ring_t ring, int *count);
988 
1000 SNF_FUNC(int)
1001 snf_ring_portinfo(snf_ring_t ring, struct snf_ring_portinfo *portinfo);
1002 
1006 SNF_FUNC(int)
1008 
1035 SNF_FUNC(int)
1036 snf_ring_recv_many(snf_ring_t ring, int timeout_ms,
1037  struct snf_recv_req *req_vector, int nreq_in, int *nreq_out,
1038  struct snf_ring_qinfo *qinfo);
1039 
1097 SNF_FUNC(int)
1098 snf_ring_return_many(snf_ring_t ring, uint32_t data_qlen,
1099  struct snf_ring_qinfo *qinfo);
1100 
1106 struct snf_ring_stats {
1107  uint64_t nic_pkt_recv;
1108  uint64_t nic_pkt_overflow;
1109  uint64_t nic_pkt_bad;
1110  uint64_t ring_pkt_recv;
1111  uint64_t ring_pkt_overflow;
1112  uint64_t nic_bytes_recv;
1116  uint64_t snf_pkt_overflow;
1118  uint64_t nic_pkt_dropped;
1120 };
1121 
1136 SNF_FUNC(int) snf_ring_getstats(snf_ring_t ringh, struct snf_ring_stats *stats);
1137 
1138 
1150 typedef struct snf_inject_handle *snf_inject_t;
1170 SNF_FUNC(int) snf_inject_open(int portnum, int flags, snf_inject_t *handle);
1171 
1182 SNF_FUNC(int) snf_get_injection_speed(snf_inject_t devhandle, uint64_t *speed);
1183 
1229 SNF_FUNC(int) snf_inject_send(snf_inject_t inj, int timeout_ms, int flags,
1230  const void *pkt, uint32_t length);
1231 
1279 SNF_FUNC(int) snf_inject_sched(snf_inject_t inj, int timeout_ms, int flags,
1280  const void *pkt, uint32_t length, uint64_t delay_ns);
1281 
1285 struct snf_pkt_fragment {
1286  const void *ptr;
1287  uint32_t length;
1288 };
1289 
1361 SNF_FUNC(int) snf_inject_send_v(snf_inject_t inj, int timeout_ms, int flags,
1362  struct snf_pkt_fragment *frags_vec, int nfrags,
1363  uint32_t length_hint);
1441 SNF_FUNC(int) snf_inject_sched_v(snf_inject_t inj, int timeout_ms, int flags,
1442  struct snf_pkt_fragment *frags_vec, int nfrags,
1443  uint32_t length_hint, uint64_t delay_ns);
1459 SNF_FUNC(int) snf_inject_close(snf_inject_t inj);
1460 
1465 struct snf_inject_stats {
1466  uint64_t inj_pkt_send;
1467  uint64_t nic_pkt_send;
1468  uint64_t nic_bytes_send;
1469 };
1470 
1485 SNF_FUNC(int) snf_inject_getstats(snf_inject_t inj, struct snf_inject_stats *stats);
1506 typedef void * snf_netdev_reflect_t;
1518 SNF_FUNC(int) snf_netdev_reflect_enable(snf_handle_t hsnf, snf_netdev_reflect_t *handle);
1519 
1535 SNF_FUNC(int) snf_netdev_reflect(snf_netdev_reflect_t ref_dev, const void *pkt, uint32_t length);
1536 
1539 #ifdef __cplusplus
1540 }
1541 #endif
1542 #endif /* _snf_h */
int snf_get_timesource_state(snf_handle_t devhandle, enum snf_timesource_state *state)
Definition: snf.h:407
Definition: snf.h:1466
void snf_freeifaddrs(struct snf_ifaddrs *ifaddrs)
int snf_inject_send(snf_inject_t inj, int timeout_ms, int flags, const void *pkt, uint32_t length)
Send a packet and optionally block until send resources are available.
const char * snf_ifa_name
Definition: snf.h:414
Definition: snf.h:1107
int snf_getifaddrs(struct snf_ifaddrs **ifaddrs_o)
int snf_ring_return_many(snf_ring_t ring, uint32_t data_qlen, struct snf_ring_qinfo *qinfo)
Return packet space to receive ring.
uint64_t snf_ifa_link_speed
Definition: snf.h:423
int snf_get_injection_speed(snf_inject_t devhandle, uint64_t *speed)
uint8_t snf_ifa_macaddr[6]
Definition: snf.h:418
Definition: snf.h:401
Definition: snf.h:408
Definition: snf.h:510
snf_rss_params_mode
Definition: snf.h:485
Definition: snf.h:487
struct snf_inject_handle * snf_inject_t
Definition: snf.h:1151
int snf_open(uint32_t portnum, int num_rings, const struct snf_rss_params *rss_params, int64_t dataring_sz, int flags, snf_handle_t *devhandle)
Open device for single or multi-ring operation.
uintptr_t data_size
Definition: snf.h:980
enum snf_link_state snf_ifa_link_state
Definition: snf.h:421
int snf_getportmask_linkup(uint32_t *mask_o, int *cnt_o)
int snf_netdev_reflect(snf_netdev_reflect_t ref_dev, const void *pkt, uint32_t length)
Reflect a packet to the network device.
enum snf_rss_params_mode mode
Definition: snf.h:612
int snf_ring_close(snf_ring_t ringh)
Definition: snf.h:509
int snf_netdev_reflect_enable(snf_handle_t hsnf, snf_netdev_reflect_t *handle)
Enable a network device for packet reflection.
uint32_t portcnt
Definition: snf.h:977
Definition: snf.h:506
Definition: snf.h:918
int snf_ring_portinfo_count(snf_ring_t ring, int *count)
For aggregated rings, return the number of physical subrings. If the ring is not aggregated, the count is set to 1.
int snf_stop(snf_handle_t devhandle)
uint8_t pad[2]
Definition: snf.h:419
snf_timesource_state
Definition: snf.h:400
int snf_close(snf_handle_t devhandle)
Close port.
int snf_ring_getstats(snf_ring_t ringh, struct snf_ring_stats *stats)
Get statistics from a receive ring.
int snf_open_defaults(uint32_t portnum, snf_handle_t *devhandle)
Open device for single or multi-ring operation.
Definition: snf.h:967
int snf_inject_sched(snf_inject_t inj, int timeout_ms, int flags, const void *pkt, uint32_t length, uint64_t delay_ns)
Send a packet with hardware delay and optionally block until send resources are available.
int snf_ifa_maxrings
Definition: snf.h:417
struct snf_rss_mode_function rss_function
Definition: snf.h:615
int snf_get_link_state(snf_handle_t devhandle, enum snf_link_state *state)
uintptr_t data_addr
Definition: snf.h:979
uint32_t snf_ifa_portnum
Definition: snf.h:415
uint32_t portmask
Definition: snf.h:978
int snf_init(uint16_t api_version)
Initialize Sniffer Library with api_version == SNF_VERSION_API.
int snf_inject_open(int portnum, int flags, snf_inject_t *handle)
Open a port for injection and allocate an injection handle.
snf_rss_mode_flags
Definition: snf.h:505
struct snf_ring * snf_ring_t
opaque snf ring handle
Definition: snf.h:849
int snf_getportmask_valid(uint32_t *mask_o, int *cnt_o)
Definition: snf.h:974
int snf_inject_close(snf_inject_t inj)
Close injection handle.
Definition: snf.h:404
struct snf_ifaddrs * snf_ifa_next
Definition: snf.h:413
struct snf_handle * snf_handle_t
opaque snf device handle
Definition: snf.h:345
int snf_get_link_speed(snf_handle_t devhandle, uint64_t *speed)
int snf_inject_send_v(snf_inject_t inj, int timeout_ms, int flags, struct snf_pkt_fragment *frags_vec, int nfrags, uint32_t length_hint)
Send a packet assembled from a vector of fragments and optionally block until send resources are avai...
int snf_start(snf_handle_t devhandle)
Definition: snf.h:406
snf_ring_t ring
Definition: snf.h:975
Definition: snf.h:508
snf_link_state
Definition: snf.h:394
int snf_ring_recv(snf_ring_t ringh, int timeout_ms, struct snf_recv_req *recv_req)
Receive next packet from a receive ring.
int snf_ring_recv_qinfo(snf_ring_t ring, struct snf_ring_qinfo *)
Return queue information from ring.
void * snf_netdev_reflect_t
Definition: snf.h:1507
uintptr_t q_size
Definition: snf.h:976
int snf_inject_getstats(snf_inject_t inj, struct snf_inject_stats *stats)
Get statistics from an injection handle.
int snf_ring_open(snf_handle_t devhandle, snf_ring_t *ringh)
int snf_ifa_maxinject
Definition: snf.h:420
Definition: snf.h:412
int snf_ring_recv_many(snf_ring_t ring, int timeout_ms, struct snf_recv_req *req_vector, int nreq_in, int *nreq_out, struct snf_ring_qinfo *qinfo)
Receive and borrow many packets at once.
Definition: snf.h:521
int snf_ring_open_id(snf_handle_t devhandle, int ring_id, snf_ring_t *ringh)
Fragment for snf_inject_send_v.
Definition: snf.h:1286
Definition: snf.h:507
Definition: snf.h:611
enum snf_rss_mode_flags rss_flags
Definition: snf.h:614
int snf_set_app_id(int32_t id)
Set the application ID.
Definition: snf.h:486
Definition: snf.h:405
int snf_inject_sched_v(snf_inject_t inj, int timeout_ms, int flags, struct snf_pkt_fragment *frags_vec, int nfrags, uint32_t length_hint, uint64_t delay_ns)
Send a packet assembled from a vector of fragments at a scheduled point relative to the start of the ...
union snf_rss_params::@0 params
Myricom banner
Thu Jan 7 2021 14:20:25 - SNF 5.3.2.11.54430