X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=blobdiff_plain;f=fhi_lib%2Flib%2Fethernet%2Fethernet.h;h=f3efe7bdad793abac02a94cabc85249d01766055;hp=dbc5cc27cd3931d77cf2390fa2509a8a5d185919;hb=2fbf70096f64af622da983e88c5a64e90ad9bdbd;hpb=9e108bb6d4caf2f6d4e920c640882fa49c15684c diff --git a/fhi_lib/lib/ethernet/ethernet.h b/fhi_lib/lib/ethernet/ethernet.h index dbc5cc2..f3efe7b 100644 --- a/fhi_lib/lib/ethernet/ethernet.h +++ b/fhi_lib/lib/ethernet/ethernet.h @@ -1,168 +1,168 @@ -/****************************************************************************** -* -* Copyright (c) 2019 Intel. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*******************************************************************************/ - -/** - * @brief This file has all definitions for the Ethernet Data Interface Layer - * @file ethernet.h - * @ingroup group_lte_source_auxlib - * @author Intel Corporation - **/ - -#ifndef AUXLIB_ETHERNET_H -#define AUXLIB_ETHERNET_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -#define BURST_SIZE 4096 - -//#define VLAN_SUPPORT -#define FLEXRAN_UP_VLAN_TAG 2 -#define ETHER_TYPE_ETHDI ETHER_TYPE_IPv4 /* hack needed for jumbo frames */ -#define ETHER_TYPE_ECPRI 0xAEFE -#define ETHER_TYPE_SYNC 0xBEFE -#define ETHER_TYPE_START_TX 0xCEFE - -#define NUM_MBUFS 65536 -#define MBUF_CACHE 256 - -#define MBUF_POOL_ELM_SMALL 1500 /* regular ethernet MTU, most compatible */ -#define MBUF_POOL_ELEMENT MAX_RX_LEN - -#define MAX_RX_LEN 9600 -#define MAX_TX_LEN (MAX_RX_LEN - 14) /* headroom for rx driver */ -#define MAX_DATA_SIZE (MAX_TX_LEN - sizeof(struct ether_hdr) - \ - sizeof(struct ethdi_hdr) - sizeof(struct burst_hdr)) - -/* Looks like mbuf size is limited to 16 bits - see the buf_len field. */ -#define MBUF_POOL_ELM_BIG USHRT_MAX -#define NUM_MBUFS_BIG 64 - -#define DEFAULT_DUMP_LENGTH 96 - -extern struct rte_mempool *_eth_mbuf_pool; -extern struct rte_mempool *_eth_mbuf_pool_small; -extern struct rte_mempool *_eth_mbuf_pool_big; -extern struct rte_mempool *socket_direct_pool; -extern struct rte_mempool *socket_indirect_pool; - -/* Do NOT change the order of this enum and below - * - need to be in sync with the table of handlers in testue.c */ -enum pkt_type -{ - PKT_ZERO, - PKT_EMPTY, - PKT_DISCOVER_REQUEST, - PKT_PING, - PKT_PONG, - PKT_DISCOVER_REPLY, - PKT_LTE_DATA, - PKT_LTE_CONTROL, - PKT_BURST, - PKT_DATATEST, - PKT_ADD_ETHDEV, - PKT_SYNC_START, - PKT_LAST, -}; - -/* Do NOT change the order. */ -static char * const xran_pkt_descriptions[PKT_LAST + 1] = { - "ZERO", - "empty packet", - "discovery request packet", - "ping packet", - "pong packet", - "discovery reply packet", - "LTE data packet", - "LTE control packet", - "BURST packet", - "DATATEST packet", - "Add ethernet port command packet", - "SYNC-START packet", - "LAST packet", -}; - -struct burst_hdr { - int8_t pkt_idx; - int8_t total_pkts; - int8_t original_type; - int8_t data[]; -}; - -struct ethdi_hdr { - uint8_t pkt_type; - uint8_t source_id; - uint8_t dest_id; - int8_t data[]; /* original raw data starts here! */ -}; - - -void xran_init_mbuf_pool(void); - -void xran_init_port(int port, struct ether_addr *p_lls_cu_addr); - -void xran_add_eth_hdr_vlan(struct ether_addr *dst, uint16_t ethertype, struct rte_mbuf *mb, uint16_t vlan_tci); - -#if 0 -void xran_memdump(void *addr, int len); -void xran_add_eth_hdr(struct ether_addr *dst, uint16_t ethertype, struct rte_mbuf *); -int xran_send_mbuf(struct ether_addr *dst, struct rte_mbuf *mb); -int xran_send_message_burst(int dst_id, int pkt_type, void *body, int len); -int xran_show_delayed_message(void); -#endif -/* - * Print a message after all critical processing done. - * Mt-safe. 4 variants - normal, warning, error and debug log. - */ -int __xran_delayed_msg(const char *fmt, ...); -#define nlog(m, ...) __xran_delayed_msg("%s(): " m "\n", __FUNCTION__, ##__VA_ARGS__) -#define delayed_message nlog /* this is the old alias for this function */ -#define wlog(m, ...) nlog("WARNING: " m, ##__VA_ARGS__) -#define elog(m, ...) nlog("ERROR: " m, ##__VA_ARGS__) -#ifdef DEBUG -# define dlog(m, ...) nlog("DEBUG: " m, ##__VA_ARGS__) -#else -# define dlog(m, ...) -#endif - -#define PANIC_ON(x, m, ...) do { if (unlikely(x)) \ - rte_panic("%s: " m "\n", #x, ##__VA_ARGS__); } while (0) - -/* Add mbuf to the TX ring. */ -static inline int xran_enqueue_mbuf(struct rte_mbuf *mb, struct rte_ring *r) -{ - if (rte_ring_enqueue(r, mb) == 0) { - return 1; /* success */ - } - - rte_pktmbuf_free(mb); - wlog("failed to enqueue packet on port %d (ring full)", mb->port); - - return 0; /* fail */ -} - -#ifdef __cplusplus -} -#endif - -#endif /* AUXLIB_ETHERNET_H */ +/****************************************************************************** +* +* Copyright (c) 2019 Intel. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +/** + * @brief This file has all definitions for the Ethernet Data Interface Layer + * @file ethernet.h + * @ingroup group_lte_source_auxlib + * @author Intel Corporation + **/ + +#ifndef AUXLIB_ETHERNET_H +#define AUXLIB_ETHERNET_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define BURST_SIZE 4096 + +//#define VLAN_SUPPORT +#define FLEXRAN_UP_VLAN_TAG 2 +#define ETHER_TYPE_ETHDI ETHER_TYPE_IPv4 /* hack needed for jumbo frames */ +#define ETHER_TYPE_ECPRI 0xAEFE +#define ETHER_TYPE_SYNC 0xBEFE +#define ETHER_TYPE_START_TX 0xCEFE + +#define NUM_MBUFS 65536 +#define MBUF_CACHE 256 + +#define MBUF_POOL_ELM_SMALL 1500 /* regular ethernet MTU, most compatible */ +#define MBUF_POOL_ELEMENT MAX_RX_LEN + +#define MAX_RX_LEN 9600 +#define MAX_TX_LEN (MAX_RX_LEN - 14) /* headroom for rx driver */ +#define MAX_DATA_SIZE (MAX_TX_LEN - sizeof(struct ether_hdr) - \ + sizeof(struct ethdi_hdr) - sizeof(struct burst_hdr)) + +/* Looks like mbuf size is limited to 16 bits - see the buf_len field. */ +#define MBUF_POOL_ELM_BIG USHRT_MAX +#define NUM_MBUFS_BIG 64 + +#define DEFAULT_DUMP_LENGTH 96 + +extern struct rte_mempool *_eth_mbuf_pool; +extern struct rte_mempool *_eth_mbuf_pool_small; +extern struct rte_mempool *_eth_mbuf_pool_big; +extern struct rte_mempool *socket_direct_pool; +extern struct rte_mempool *socket_indirect_pool; + +/* Do NOT change the order of this enum and below + * - need to be in sync with the table of handlers in testue.c */ +enum pkt_type +{ + PKT_ZERO, + PKT_EMPTY, + PKT_DISCOVER_REQUEST, + PKT_PING, + PKT_PONG, + PKT_DISCOVER_REPLY, + PKT_LTE_DATA, + PKT_LTE_CONTROL, + PKT_BURST, + PKT_DATATEST, + PKT_ADD_ETHDEV, + PKT_SYNC_START, + PKT_LAST, +}; + +/* Do NOT change the order. */ +static char * const xran_pkt_descriptions[PKT_LAST + 1] = { + "ZERO", + "empty packet", + "discovery request packet", + "ping packet", + "pong packet", + "discovery reply packet", + "LTE data packet", + "LTE control packet", + "BURST packet", + "DATATEST packet", + "Add ethernet port command packet", + "SYNC-START packet", + "LAST packet", +}; + +struct burst_hdr { + int8_t pkt_idx; + int8_t total_pkts; + int8_t original_type; + int8_t data[]; +}; + +struct ethdi_hdr { + uint8_t pkt_type; + uint8_t source_id; + uint8_t dest_id; + int8_t data[]; /* original raw data starts here! */ +}; + + +void xran_init_mbuf_pool(void); + +void xran_init_port(int port, struct ether_addr *p_lls_cu_addr); + +void xran_add_eth_hdr_vlan(struct ether_addr *dst, uint16_t ethertype, struct rte_mbuf *mb, uint16_t vlan_tci); + +#if 0 +void xran_memdump(void *addr, int len); +void xran_add_eth_hdr(struct ether_addr *dst, uint16_t ethertype, struct rte_mbuf *); +int xran_send_mbuf(struct ether_addr *dst, struct rte_mbuf *mb); +int xran_send_message_burst(int dst_id, int pkt_type, void *body, int len); +int xran_show_delayed_message(void); +#endif +/* + * Print a message after all critical processing done. + * Mt-safe. 4 variants - normal, warning, error and debug log. + */ +int __xran_delayed_msg(const char *fmt, ...); +#define nlog(m, ...) __xran_delayed_msg("%s(): " m "\n", __FUNCTION__, ##__VA_ARGS__) +#define delayed_message nlog /* this is the old alias for this function */ +#define wlog(m, ...) nlog("WARNING: " m, ##__VA_ARGS__) +#define elog(m, ...) nlog("ERROR: " m, ##__VA_ARGS__) +#ifdef DEBUG +# define dlog(m, ...) nlog("DEBUG: " m, ##__VA_ARGS__) +#else +# define dlog(m, ...) +#endif + +#define PANIC_ON(x, m, ...) do { if (unlikely(x)) \ + rte_panic("%s: " m "\n", #x, ##__VA_ARGS__); } while (0) + +/* Add mbuf to the TX ring. */ +static inline int xran_enqueue_mbuf(struct rte_mbuf *mb, struct rte_ring *r) +{ + if (rte_ring_enqueue(r, mb) == 0) { + return 1; /* success */ + } + + rte_pktmbuf_free(mb); + wlog("failed to enqueue packet on port %d (ring full)", mb->port); + + return 0; /* fail */ +} + +#ifdef __cplusplus +} +#endif + +#endif /* AUXLIB_ETHERNET_H */