mtcp_sendpkt − Sends a self-constructed TCP packet to network


#include <mos_api.h>

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


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;


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).


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



mctx is invalid, or pinfo is NULL.


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.


mOS development team <>


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


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