
- icmp_responder: responds to ICMPv4 and ARP requests - loopback: connects two interfaces and sends a verification packet from master memif to slave memif where it is looped back - loopback (reverse path): reverses direction of packet in loopback application (slave memif to master memif) Type: refactor Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ie90aaa3367269408efb6c5d538ad5aa827432238 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
116 lines
3.8 KiB
C
116 lines
3.8 KiB
C
/*
|
|
*------------------------------------------------------------------
|
|
* Copyright (c) 2020 Cisco and/or its affiliates.
|
|
* 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.
|
|
*------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef _COMMON_H_
|
|
#define _COMMON_H_
|
|
|
|
#include <libmemif.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <sys/types.h>
|
|
|
|
#ifdef ICMP_DBG
|
|
#define DBG(...) \
|
|
do \
|
|
{ \
|
|
printf (APP_NAME ":%s:%d: ", __func__, __LINE__); \
|
|
printf (__VA_ARGS__); \
|
|
printf ("\n"); \
|
|
} \
|
|
while (0)
|
|
#else
|
|
#define DBG(...)
|
|
#endif
|
|
|
|
#define INFO(...) \
|
|
do \
|
|
{ \
|
|
printf ("INFO: " __VA_ARGS__); \
|
|
printf ("\n"); \
|
|
} \
|
|
while (0)
|
|
|
|
/* maximum tx/rx memif buffers */
|
|
#define MAX_MEMIF_BUFS 256
|
|
|
|
struct memif_connection;
|
|
|
|
typedef int (memif_packet_handler_t) (struct memif_connection *conn);
|
|
|
|
typedef int (packet_generator_t) (struct memif_connection *c,
|
|
uint16_t num_pkts);
|
|
|
|
typedef struct memif_connection
|
|
{
|
|
uint16_t index;
|
|
/* memif conenction handle */
|
|
memif_conn_handle_t conn;
|
|
uint8_t is_connected;
|
|
/* transmit queue id */
|
|
uint16_t tx_qid;
|
|
/* tx buffers */
|
|
memif_buffer_t *tx_bufs;
|
|
/* allocated tx buffers counter */
|
|
/* number of tx buffers pointing to shared memory */
|
|
uint16_t tx_buf_num;
|
|
/* rx buffers */
|
|
memif_buffer_t *rx_bufs;
|
|
/* allcoated rx buffers counter */
|
|
/* number of rx buffers pointing to shared memory */
|
|
uint16_t rx_buf_num;
|
|
memif_packet_handler_t *packet_handler;
|
|
/* interface ip address */
|
|
uint8_t ip_addr[4];
|
|
/* interface hw address */
|
|
uint8_t hw_addr[6];
|
|
} memif_connection_t;
|
|
|
|
void print_version ();
|
|
|
|
int parse_ip4 (const char *input, uint8_t out[4]);
|
|
|
|
int parse_mac (const char *input, uint8_t out[6]);
|
|
|
|
void alloc_memif_buffers (memif_connection_t *c);
|
|
|
|
void free_memif_buffers (memif_connection_t *c);
|
|
|
|
void print_memif_details (memif_connection_t *c);
|
|
|
|
void print_memif_rx_ring_details (memif_connection_t *c, uint16_t qid);
|
|
|
|
void print_memif_tx_ring_details (memif_connection_t *c, uint16_t qid);
|
|
|
|
int send_packets (memif_connection_t *conn, uint16_t qid,
|
|
packet_generator_t *gen, uint32_t num_pkts,
|
|
uint16_t max_pkt_size);
|
|
|
|
/* Expect packets smaller than 2048b */
|
|
int responder (memif_conn_handle_t conn, void *private_ctx, uint16_t qid);
|
|
|
|
/* Expect packets smaller than 2048b */
|
|
int responder_zero_copy (memif_conn_handle_t conn, void *private_ctx,
|
|
uint16_t qid);
|
|
|
|
/* reply with the same data */
|
|
int basic_packet_handler (memif_connection_t *conn);
|
|
|
|
/* ICMPv4 and ARP handler */
|
|
int icmp_packet_handler (memif_connection_t *conn);
|
|
|
|
#endif /* COMMON_H */ |