mtcp_sendpkt

NAME

mtcp_sendpkt − Sends a self-constructed TCP packet to network

SYNOPSIS

#include <mos_api.h>

int mtcp_sendpkt(mctx_t mctx, int sockid, struct pkt_info *pinfo);

DESCRIPTION

mtcp_sendpkt() sends a self-constructed TCP packet for a given flow to network. The user can select the socket descriptor using sockid and the pinfo points to an instance of struct pkt_info that is allocated and filled by the user via mtcp_getlastpkt() function. It is the user's responsibility to allocate the pkt_info structure before the function call, and free the pkt_info after the function call. The structure is defined as:

struct pkt_info {

// pkt recving time

uint32_t cur_ts;

// ETH

uint16_t eth_len;

// IP

uint16_t ip_len;

//TCP

uint64_t offset; // TCP recv buffer offset

uint16_t payloadlen;

uint32_t seq;

uint32_t ack_seq;

uint16_t window;

struct ethhdr *ethh;

struct iphdr *iph;

struct tcphdr *tcph;

uint8_t *payload;

}

A successful call to mtcp_sendpkt() constructs a TCP packet based on the given packet information pinfo and send the packet to the network.

An mtcp_sendpkt() call takes an additional argument named mctx that represents the per-core mTCP context in an application (see mtcp_create_context() for details).

RETURN VALUE

Returns 0 on success; -1 on failure. In case of failure, errno is set appropriately.

ERRORS

EACCES

mctx is invalid, or pinfo is NULL.

ENODATA

The packet information does not contain a valid IP header or TCP header information. This normally does not occur when we put the result of the mtcp_sendpkt() function. Therefore, it means that the user modified the packet information inappropriately.

AUTHORS

mOS development team <mtcp-user@list.ndsl.kaist.edu>

SEE ALSO

mtcp_create_context(), mtcp_setlastpkt(), mtcp_socket(),

COLOPHON

This page is part of mOS release 0.3 docs section. A description of the project, and information about reporting bugs, can be found at http://mos.kaist.edu/.