|
INET Framework for OMNeT++/OMNEST
|
Module for using the LwIP TCP stack.
More...
#include <TcpLwip.h>
|
|
| virtual void | initialize (int stage) override |
| |
| virtual int | numInitStages () const override |
| |
| virtual void | handleMessage (cMessage *msgP) override |
| |
| virtual void | finish () override |
| |
| virtual void | refreshDisplay () const override |
| |
|
| virtual void | ip_output (LwipTcpLayer::tcp_pcb *pcb, L3Address const &src, L3Address const &dest, void *tcpseg, int len) override |
| | TCP layer send a packet to IP layer. More...
|
| |
| virtual err_t | lwip_tcp_event (void *arg, LwipTcpLayer::tcp_pcb *pcb, LwipTcpLayer::lwip_event event, struct pbuf *p, u16_t size, err_t err) override |
| | TCP layer events. More...
|
| |
| virtual void | lwip_free_pcb_event (LwipTcpLayer::tcp_pcb *pcb) override |
| | TCP layer event called before LWIP freeing a pcb. More...
|
| |
| virtual netif * | ip_route (L3Address const &ipAddr) override |
| | Get the network interface. More...
|
| |
| virtual void | notifyAboutIncomingSegmentProcessing (LwipTcpLayer::tcp_pcb *pcb, uint32_t seqNo, const void *dataptr, int len) override |
| |
|
| err_t | tcp_event_accept (TcpLwipConnection &conn, LwipTcpLayer::tcp_pcb *pcb, err_t err) |
| |
| err_t | tcp_event_sent (TcpLwipConnection &conn, u16_t size) |
| |
| err_t | tcp_event_recv (TcpLwipConnection &conn, struct pbuf *p, err_t err) |
| |
| err_t | tcp_event_conn (TcpLwipConnection &conn, err_t err) |
| |
| err_t | tcp_event_poll (TcpLwipConnection &conn) |
| |
| err_t | tcp_event_err (TcpLwipConnection &conn, err_t err) |
| |
Module for using the LwIP TCP stack.
◆ TcpAppConnMap
◆ TcpLwip()
| inet::tcp::TcpLwip::TcpLwip |
( |
| ) |
|
◆ ~TcpLwip()
| inet::tcp::TcpLwip::~TcpLwip |
( |
| ) |
|
|
virtual |
116 EV_TRACE <<
this <<
": destructor\n";
◆ createReceiveQueue()
◆ createSendQueue()
◆ findAppConn()
◆ findConnByPcb()
◆ finish()
| void inet::tcp::TcpLwip::finish |
( |
| ) |
|
|
overrideprotectedvirtual |
◆ getLwipTcpLayer()
| LwipTcpLayer* inet::tcp::TcpLwip::getLwipTcpLayer |
( |
| ) |
|
|
inline |
◆ handleLowerPacket()
| void inet::tcp::TcpLwip::handleLowerPacket |
( |
Packet * |
packet | ) |
|
|
protected |
133 L3Address srcAddr, destAddr;
134 int interfaceId = -1;
136 auto tcpsegP = packet->peekAtFront<TcpHeader>();
137 srcAddr = packet->getTag<
L3AddressInd>()->getSrcAddress();
138 destAddr = packet->getTag<
L3AddressInd>()->getDestAddress();
139 interfaceId = (packet->getTag<InterfaceInd>())->getInterfaceId();
141 switch (tcpsegP->getCrcMode()) {
143 EV_WARN <<
"CRC error, packet dropped\n";
149 const auto& newTcpsegP = packet->removeAtFront<TcpHeader>();
151 newTcpsegP->setCrc(0);
152 packet->insertAtFront(newTcpsegP);
153 tcpsegP = newTcpsegP;
161 size_t ipHdrLen =
sizeof(
ip_hdr);
162 size_t const maxBufferSize = 4096;
163 char *data =
new char[maxBufferSize];
164 memset(data, 0, maxBufferSize);
169 ih->_hl = ipHdrLen / 4;
170 ASSERT((ih->_hl) * 4 == ipHdrLen);
172 ih->src.addr = srcAddr;
173 ih->
dest.addr = destAddr;
175 size_t totalTcpLen = maxBufferSize - ipHdrLen;
177 const auto& bytes = packet->peekDataAsBytes();
178 totalTcpLen = bytes->copyToBuffer((uint8_t *)data + ipHdrLen, totalTcpLen);
180 size_t totalIpLen = ipHdrLen + totalTcpLen;
184 L3Address laddr = ih->
dest.addr;
185 L3Address raddr = ih->src.addr;
186 u16_t lport = tcpsegP->getDestPort();
187 u16_t rport = tcpsegP->getSrcPort();
189 if (tcpsegP->getSynBit() && tcpsegP->getAckBit()) {
191 LwipTcpLayer::tcp_pcb *pcb = elem.second->pcbM;
193 if ((pcb->state == LwipTcpLayer::SYN_SENT)
194 && (pcb->local_ip.addr.isUnspecified())
195 && (pcb->local_port == lport)
196 && (pcb->remote_ip.addr == raddr)
197 && (pcb->remote_port == rport)
200 pcb->local_ip.addr = laddr;
Referenced by handleMessage().
◆ handleMessage()
| void inet::tcp::TcpLwip::handleMessage |
( |
cMessage * |
msgP | ) |
|
|
overrideprotectedvirtual |
429 if (msgP->isSelfMessage()) {
432 EV_TRACE <<
"Call tcp_fasttmr()\n";
434 if (simTime() ==
roundTime(simTime(), 2)) {
435 EV_TRACE <<
"Call tcp_slowtmr()\n";
440 throw cRuntimeError(
"Unknown self message");
443 else if (msgP->arrivedOn(
"ipIn")) {
445 Packet *pk = check_and_cast<Packet *>(msgP);
448 EV_TRACE <<
this <<
": handle tcp segment: " << msgP->getName() <<
"\n";
452 EV_WARN <<
"ICMP error received -- discarding\n";
456 throw cRuntimeError(
"Unknown protocol: %s(%d)",
protocol->getName(),
protocol->getId());
459 EV_TRACE <<
this <<
": handle msg: " << msgP->getName() <<
"\n";
◆ handleUpperCommand()
| void inet::tcp::TcpLwip::handleUpperCommand |
( |
cMessage * |
msgP | ) |
|
|
protected |
392 auto&
tags = check_and_cast<ITaggedObject *>(msgP)->getTags();
393 int connId =
tags.getTag<SocketReq>()->getSocketId();
400 auto moduleType = cModuleType::get(
"inet.transportlayer.tcp_lwip.TcpLwipConnection");
401 char submoduleName[24];
402 sprintf(submoduleName,
"conn-%d",
connId);
403 conn = check_and_cast<TcpLwipConnection *>(moduleType->create(submoduleName,
this));
404 conn->finalizeParameters();
406 conn->initConnection(*
this,
connId);
407 conn->callInitialize();
411 EV_INFO <<
this <<
": TCP connection created for " << msgP <<
"\n";
415 conn->processAppCommand(msgP);
Referenced by handleMessage().
◆ initialize()
| void inet::tcp::TcpLwip::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
59 cSimpleModule::initialize(stage);
61 EV_TRACE <<
this <<
": initialize stage " << stage << endl;
65 q = par(
"sendQueueClass");
67 throw cRuntimeError(
"Don't use obsolete sendQueueClass = \"%s\" parameter", q);
69 q = par(
"receiveQueueClass");
71 throw cRuntimeError(
"Don't use obsolete receiveQueueClass = \"%s\" parameter", q);
73 const char *crcModeString = par(
"crcMode");
80 EV_INFO <<
"TcpLwip " <<
this <<
" has stack " <<
pLwipTcpLayerM <<
"\n";
84 NodeStatus *nodeStatus = node ? check_and_cast_nullable<NodeStatus *>(node->getSubmodule(
"status")) : nullptr;
85 bool isOperational = (!nodeStatus) || nodeStatus->getState() ==
NodeStatus::UP;
87 throw cRuntimeError(
"This module doesn't support starting in node DOWN state");
92 cModuleType *moduleType = cModuleType::get(
"inet.transportlayer.tcp_common.TcpCrcInsertionHook");
93 auto *crcInsertion = check_and_cast<TcpCrcInsertionHook *>(moduleType->create(
"crcInsertion",
this));
94 crcInsertion->finalizeParameters();
95 crcInsertion->callInitialize();
98 auto ipv4 =
dynamic_cast<INetfilter *
>(findModuleByPath(
"^.ipv4.ip"));
100 ipv4->registerHook(0, crcInsertion);
102 #ifdef INET_WITH_IPv6
103 auto ipv6 =
dynamic_cast<INetfilter *
>(findModuleByPath(
"^.ipv6.ipv6"));
105 ipv6->registerHook(0, crcInsertion);
◆ ip_output()
| void inet::tcp::TcpLwip::ip_output |
( |
LwipTcpLayer::tcp_pcb * |
pcb, |
|
|
L3Address const & |
src, |
|
|
L3Address const & |
dest, |
|
|
void * |
tcpseg, |
|
|
int |
len |
|
) |
| |
|
overrideprotectedvirtual |
TCP layer send a packet to IP layer.
- Parameters
-
| pcb | the lwip pcb or nullptr (tipically when send a RESET ) |
| src | the source IP addr |
| dest | the destination IP addr |
| tcpseg | pointer to TCP segment (message) |
| len | length of tcpseg |
Implements inet::tcp::LwipTcpStackIf.
587 TcpLwipConnection *conn = (pcb !=
nullptr) ?
static_cast<TcpLwipConnection *
>(pcb->callback_arg) :
nullptr;
589 Packet *packet =
nullptr;
592 packet = conn->sendQueueM->createSegmentWithBytes(dataP, lenP);
595 const auto& bytes = makeShared<BytesChunk>((
const uint8_t *)dataP, lenP);
596 packet =
new Packet(
nullptr, bytes);
597 const auto& tcpHdr = packet->popAtFront<TcpHeader>();
599 int64_t numBytes = packet->getByteLength();
600 ASSERT(numBytes == 0);
601 packet->insertAtFront(tcpHdr);
606 auto tcpHdr = packet->removeAtFront<TcpHeader>();
611 EV_TRACE <<
this <<
": Sending: conn=" << conn <<
", data: " << dataP <<
" of len " << lenP
612 <<
" from " << srcP <<
" to " << destP <<
"\n";
614 IL3AddressType *addressType = destP.getAddressType();
617 auto addresses = packet->addTag<L3AddressReq>();
618 addresses->setSrcAddress(srcP);
619 addresses->setDestAddress(destP);
621 conn->notifyAboutSending(*tcpHdr);
624 EV_INFO <<
this <<
": Send segment:";
626 EV_INFO <<
"conn ID=" << conn->connIdM;
627 EV_INFO <<
" from " << srcP <<
" to " << destP <<
" SEQ=" << tcpHdr->getSequenceNo();
628 if (tcpHdr->getSynBit())
630 if (tcpHdr->getAckBit())
631 EV_INFO <<
" ACK=" << tcpHdr->getAckNo();
632 if (tcpHdr->getFinBit())
634 if (tcpHdr->getRstBit())
636 if (tcpHdr->getPshBit())
638 if (tcpHdr->getUrgBit())
640 EV_INFO <<
" len=" <<
B(packet->getDataLength()) - tcpHdr->getHeaderLength() <<
"\n";
642 send(packet,
"ipOut");
◆ ip_route()
| struct netif * inet::tcp::TcpLwip::ip_route |
( |
L3Address const & |
ipAddr | ) |
|
|
overrideprotectedvirtual |
◆ lwip_free_pcb_event()
| void inet::tcp::TcpLwip::lwip_free_pcb_event |
( |
LwipTcpLayer::tcp_pcb * |
pcb | ) |
|
|
overrideprotectedvirtual |
TCP layer event called before LWIP freeing a pcb.
- Parameters
-
Implements inet::tcp::LwipTcpStackIf.
237 TcpLwipConnection *conn =
static_cast<TcpLwipConnection *
>(pcb->callback_arg);
238 if (conn !=
nullptr && conn->pcbM == pcb) {
◆ lwip_tcp_event()
| err_t inet::tcp::TcpLwip::lwip_tcp_event |
( |
void * |
arg, |
|
|
LwipTcpLayer::tcp_pcb * |
pcb, |
|
|
LwipTcpLayer::lwip_event |
, |
|
|
struct pbuf * |
p, |
|
|
u16_t |
size, |
|
|
err_t |
err |
|
) |
| |
|
overrideprotectedvirtual |
TCP layer events.
Implements inet::tcp::LwipTcpStackIf.
247 TcpLwipConnection *conn =
static_cast<TcpLwipConnection *
>(arg);
248 ASSERT(conn !=
nullptr);
251 case LwipTcpLayer::LWIP_EVENT_ACCEPT:
255 case LwipTcpLayer::LWIP_EVENT_SENT:
256 ASSERT(conn->pcbM == pcb);
260 case LwipTcpLayer::LWIP_EVENT_RECV:
261 ASSERT(conn->pcbM == pcb);
265 case LwipTcpLayer::LWIP_EVENT_CONNECTED:
266 ASSERT(conn->pcbM == pcb);
270 case LwipTcpLayer::LWIP_EVENT_POLL:
272 if (conn->pcbM == pcb)
276 case LwipTcpLayer::LWIP_EVENT_ERR:
281 throw cRuntimeError(
"Invalid lwip_event: %d", event);
◆ notifyAboutIncomingSegmentProcessing()
| void inet::tcp::TcpLwip::notifyAboutIncomingSegmentProcessing |
( |
LwipTcpLayer::tcp_pcb * |
pcb, |
|
|
uint32_t |
seqNo, |
|
|
const void * |
dataptr, |
|
|
int |
len |
|
) |
| |
|
overrideprotectedvirtual |
Implements inet::tcp::LwipTcpStackIf.
222 TcpLwipConnection *conn = (pcb !=
nullptr) ?
static_cast<TcpLwipConnection *
>(pcb->callback_arg) :
nullptr;
224 conn->receiveQueueM->notifyAboutIncomingSegmentProcessing(
pCurTcpSegM, seqNo, dataptr, len);
228 if (
B(
pCurTcpSegM->getByteLength()) > tcpHdr->getHeaderLength())
229 throw cRuntimeError(
"conn is null, and received packet has data");
231 EV_WARN <<
"notifyAboutIncomingSegmentProcessing: conn is null\n";
◆ numInitStages()
| virtual int inet::tcp::TcpLwip::numInitStages |
( |
| ) |
const |
|
inlineoverrideprotectedvirtual |
◆ printConnBrief()
◆ refreshDisplay()
| void inet::tcp::TcpLwip::refreshDisplay |
( |
| ) |
const |
|
overrideprotectedvirtual |
471 if (getEnvir()->isExpressMode()) {
474 getDisplayString().setTagArg(
"t", 0,
"");
478 int numINIT = 0, numCLOSED = 0, numLISTEN = 0, numSYN_SENT = 0, numSYN_RCVD = 0,
479 numESTABLISHED = 0, numCLOSE_WAIT = 0, numLAST_ACK = 0, numFIN_WAIT_1 = 0,
480 numFIN_WAIT_2 = 0, numCLOSING = 0, numTIME_WAIT = 0;
483 LwipTcpLayer::tcp_pcb *pcb = (elem).second->pcbM;
485 if (
nullptr == pcb) {
489 enum LwipTcpLayer::tcp_state state = pcb->state;
492 case LwipTcpLayer::CLOSED:
496 case LwipTcpLayer::LISTEN:
500 case LwipTcpLayer::SYN_SENT:
504 case LwipTcpLayer::SYN_RCVD:
508 case LwipTcpLayer::ESTABLISHED:
512 case LwipTcpLayer::CLOSE_WAIT:
516 case LwipTcpLayer::LAST_ACK:
520 case LwipTcpLayer::FIN_WAIT_1:
524 case LwipTcpLayer::FIN_WAIT_2:
528 case LwipTcpLayer::CLOSING:
532 case LwipTcpLayer::TIME_WAIT:
542 sprintf(buf2 + strlen(buf2),
"init:%d ", numINIT);
544 sprintf(buf2 + strlen(buf2),
"closed:%d ", numCLOSED);
546 sprintf(buf2 + strlen(buf2),
"listen:%d ", numLISTEN);
548 sprintf(buf2 + strlen(buf2),
"syn_sent:%d ", numSYN_SENT);
550 sprintf(buf2 + strlen(buf2),
"syn_rcvd:%d ", numSYN_RCVD);
551 if (numESTABLISHED > 0)
552 sprintf(buf2 + strlen(buf2),
"estab:%d ", numESTABLISHED);
553 if (numCLOSE_WAIT > 0)
554 sprintf(buf2 + strlen(buf2),
"close_wait:%d ", numCLOSE_WAIT);
556 sprintf(buf2 + strlen(buf2),
"last_ack:%d ", numLAST_ACK);
557 if (numFIN_WAIT_1 > 0)
558 sprintf(buf2 + strlen(buf2),
"fin_wait_1:%d ", numFIN_WAIT_1);
559 if (numFIN_WAIT_2 > 0)
560 sprintf(buf2 + strlen(buf2),
"fin_wait_2:%d ", numFIN_WAIT_2);
562 sprintf(buf2 + strlen(buf2),
"closing:%d ", numCLOSING);
563 if (numTIME_WAIT > 0)
564 sprintf(buf2 + strlen(buf2),
"time_wait:%d ", numTIME_WAIT);
566 getDisplayString().setTagArg(
"t", 0, buf2);
◆ removeConnection()
◆ tcp_event_accept()
290 int newConnId = getEnvir()->getUniqueNumber();
292 auto moduleType = cModuleType::get(
"inet.transportlayer.tcp_lwip.TcpLwipConnection");
293 char submoduleName[24];
294 sprintf(submoduleName,
"conn-%d", newConnId);
295 auto newConn = check_and_cast<TcpLwipConnection *>(moduleType->create(submoduleName,
this));
296 newConn->finalizeParameters();
297 newConn->buildInside();
298 newConn->initConnection(conn, newConnId, pcb);
299 newConn->callInitialize();
304 newConn->sendAvailableIndicationToApp(conn.connIdM);
306 EV_DETAIL <<
this <<
": TcpLwip: got accept!\n";
Referenced by lwip_tcp_event().
◆ tcp_event_conn()
◆ tcp_event_err()
361 EV_INFO <<
"Connection " << conn.connIdM <<
" aborted, closed\n";
367 EV_INFO <<
"Connection " << conn.connIdM <<
" reset\n";
373 throw cRuntimeError(
"Invalid LWIP error code: %d", err);
Referenced by lwip_tcp_event().
◆ tcp_event_poll()
◆ tcp_event_recv()
320 EV_DETAIL <<
this <<
": tcp_event_recv(" << conn.connIdM
321 <<
", pbuf[nullptr], " << (int)err <<
"):FIN\n";
323 EV_INFO <<
"Connection " << conn.connIdM << ((ind ==
TCP_I_CLOSED) ?
" closed" :
"closed by peer") << endl;
324 conn.sendIndicationToApp(ind);
329 EV_DETAIL <<
this <<
": tcp_event_recv(" << conn.connIdM <<
", pbuf[" << p->len <<
", "
330 << p->tot_len <<
"], " << (int)err <<
")\n";
331 for (
auto c = p;
c;
c =
c->next)
332 conn.receiveQueueM->enqueueTcpLayerData(
c->payload,
c->len);
Referenced by lwip_tcp_event().
◆ tcp_event_sent()
◆ crcMode
◆ isAliveM
| bool inet::tcp::TcpLwip::isAliveM = false |
|
protected |
◆ netIf
| struct netif inet::tcp::TcpLwip::netIf |
|
protected |
◆ pCurTcpSegM
| Packet* inet::tcp::TcpLwip::pCurTcpSegM = nullptr |
|
protected |
◆ pLwipFastTimerM
| cMessage* inet::tcp::TcpLwip::pLwipFastTimerM = nullptr |
|
protected |
◆ pLwipTcpLayerM
| LwipTcpLayer* inet::tcp::TcpLwip::pLwipTcpLayerM = nullptr |
|
protected |
◆ tcpAppConnMapM
The documentation for this class was generated from the following files:
err_t tcp_event_conn(TcpLwipConnection &conn, err_t err)
Definition: TcpLwip.cc:342
cModule * findContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:31
struct netif netIf
Definition: TcpLwip.h:115
bool isAliveM
Definition: TcpLwip.h:119
INET_API InitStage INITSTAGE_LAST
Operations that no other initializations can depend on, e.g.
const value< double, compose< units::m, pow< units::s, -1 > > > c(299792458)
err_t(* output)(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr)
This function is called by the IP module when it wants to send a packet on the interface.
Definition: netif.h:108
u16_t mtu
maximum transfer unit (in bytes)
Definition: netif.h:140
Packet * pCurTcpSegM
Definition: TcpLwip.h:120
@ TCP_I_CLOSED
Definition: TcpCommand_m.h:130
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down protocol
Definition: IUdp-gates.txt:25
u8_t flags
flags (see NETIF_FLAG_ above)
Definition: netif.h:146
struct ip_addr ip_addr
IP address configuration in network byte order.
Definition: netif.h:98
static const Protocol tcp
Definition: Protocol.h:112
@ TCP_I_PEER_CLOSED
Definition: TcpCommand_m.h:129
cMessage * pLwipFastTimerM
Definition: TcpLwip.h:112
const Ptr< const Chunk > peekAtFront(b length=b(-1), int flags=0) const
Returns the designated part from the beginning of the data part of the packet as an immutable chunk i...
Definition: Packet.h:245
static const Protocol icmpv4
Definition: Protocol.h:71
@ CRC_COMPUTED
Definition: CrcMode_m.h:59
struct ip_addr netmask
Definition: netif.h:99
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd L3AddressInd
Definition: IUdp-gates.txt:20
CrcMode parseCrcMode(const char *crcModeString, bool allowDisable)
Definition: CrcMode.cc:14
az accept haszálja pcb új connId
Definition: lwip_tcp.txt:42
err_t(* input)(struct pbuf *p, struct netif *inp)
This function is called by the network device driver to pass a packet up the TCP/IP stack.
Definition: netif.h:104
@ TCP_I_CONNECTION_RESET
Definition: TcpCommand_m.h:132
L3Address addr
Definition: ip_addr.h:50
void registerService(const Protocol &protocol, cGate *gate, ServicePrimitive servicePrimitive)
Registers a service primitive (SDU processing) at the given gate.
Definition: IProtocolRegistrationListener.cc:14
#define ERR_ABRT
Definition: err.h:64
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
struct netif * next
pointer to next in linked list
Definition: netif.h:95
void printConnBrief(TcpLwipConnection &connP)
Definition: TcpLwip.cc:580
intscale< b, 1, 8 > B
Definition: Units.h:1168
if(cwndVector) cwndVector -> record(state->snd_cwnd)
void insertTransportProtocolHeader(Packet *packet, const Protocol &protocol, const Ptr< TransportHeaderBase > &header)
Definition: L4Tools.cc:77
struct ip_addr gw
Definition: netif.h:100
err_t(* linkoutput)(struct netif *netif, struct pbuf *p)
This function is called by the ARP module when it wants to send a packet on the interface.
Definition: netif.h:113
INET_API InitStage INITSTAGE_TRANSPORT_LAYER
Initialization of transport-layer protocols.
LwipTcpLayer * pLwipTcpLayerM
Definition: TcpLwip.h:118
#define ERR_RST
Definition: err.h:65
err_t tcp_event_accept(TcpLwipConnection &conn, LwipTcpLayer::tcp_pcb *pcb, err_t err)
Definition: TcpLwip.cc:288
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
err_t tcp_event_poll(TcpLwipConnection &conn)
Definition: TcpLwip.cc:379
@ CRC_DECLARED_CORRECT
Definition: CrcMode_m.h:57
void handleUpperCommand(cMessage *msgP)
Definition: TcpLwip.cc:390
static const Protocol icmpv6
Definition: Protocol.h:72
TcpAppConnMap tcpAppConnMapM
Definition: TcpLwip.h:109
@ CRC_DECLARED_INCORRECT
Definition: CrcMode_m.h:58
u8_t num
number of this interface
Definition: netif.h:150
@ UP
Definition: NodeStatus.h:28
struct ip_addr src dest
Definition: ip.h.txt:96
TcpLwipConnection * findAppConn(int connIdP)
Definition: TcpLwip.cc:569
* tags
Definition: IUdp-gates.txt:3
simtime_t roundTime(const simtime_t &timeP, int secSlicesP)
Definition: TcpLwip.cc:418
err_t tcp_event_recv(TcpLwipConnection &conn, struct pbuf *p, err_t err)
Definition: TcpLwip.cc:316
char name[2]
descriptive abbreviation
Definition: netif.h:148
uint16_t u16_t
Definition: cc.h:34
err_t tcp_event_err(TcpLwipConnection &conn, err_t err)
Definition: TcpLwip.cc:357
void * state
This field can be set by the device driver and could point to state information for the device.
Definition: netif.h:126
void handleLowerPacket(Packet *packet)
Definition: TcpLwip.cc:131
err_t tcp_event_sent(TcpLwipConnection &conn, u16_t size)
Definition: TcpLwip.cc:310
void registerProtocol(const Protocol &protocol, cGate *gate, ServicePrimitive servicePrimitive)
Registers a protocol primitive (PDU processing) at the given gate.
Definition: IProtocolRegistrationListener.cc:83
CrcMode crcMode
Definition: TcpLwip.h:121
TcpStatusInd
Enum generated from inet/transportlayer/contract/tcp/TcpCommand.msg:41 by opp_msgtool.
Definition: TcpCommand_m.h:124
u8_t pbuf_free(struct pbuf *p)
Dereference a pbuf chain or queue and deallocate any no-longer-used pbufs at the head of this chain o...
Definition: pbuf.cc:559
#define ERR_OK
Definition: err.h:56
void removeConnection(TcpLwipConnection &conn)
Definition: TcpLwip.cc:349