// Write a packet bool VLanPaPutPacket(SESSION *s, void *data, UINT size) { VLAN *v; // Validate arguments if ((s == NULL) || ((v = s->PacketAdapter->Param) == NULL)) { return false; } return VLanPutPacket(v, data, size); }
// Send a packet void EthPutPacket(ETH *e, void *data, UINT size) { int s, ret; // Validate arguments if (e == NULL || data == NULL) { return; } if (size < 14 || size > MAX_PACKET_SIZE) { Free(data); return; } if (e->Tap != NULL) { #ifndef NO_VLAN // tap mode VLanPutPacket(e->Tap, data, size); #endif // NO_VLAN return; } s = e->Socket; if (s == INVALID_SOCKET) { Free(data); return; } // Send to device #ifdef BRIDGE_PCAP ret = pcap_inject(e->Pcap, data, size); if( ret == -1 ){ #ifdef _DEBUG pcap_perror(e->Pcap, "inject"); #endif // _DEBUG Debug("EthPutPacket: ret:%d size:%d\n", ret, size); } #else // BRIDGE_PCAP ret = write(s, data, size); if (ret<0) { Debug("EthPutPacket: ret:%d errno:%d size:%d\n", ret, errno, size); } #endif //BRIDGE_PCAP Free(data); }
// Send a packet void EthPutPacket(ETH *e, void *data, UINT size) { int s, ret; // Validate arguments if (e == NULL || data == NULL) { return; } if (size < 14 || size > MAX_PACKET_SIZE) { Free(data); return; } if (e->Tap != NULL) { #ifndef NO_VLAN // tap mode VLanPutPacket(e->Tap, data, size); #endif // NO_VLAN return; } s = e->Socket; if (s == INVALID_SOCKET) { Free(data); return; } // Send to device #ifdef BRIDGE_PCAP ret = pcap_inject(e->Pcap, data, size); if( ret == -1 ){ #ifdef _DEBUG pcap_perror(e->Pcap, "inject"); #endif // _DEBUG Debug("EthPutPacket: ret:%d size:%d\n", ret, size); } #else // BRIDGE_PCAP #ifndef UNIX_LINUX ret = write(s, data, size); if (ret<0) { Debug("EthPutPacket: ret:%d errno:%d size:%d\n", ret, errno, size); } #else // UNIX_LINUX { struct iovec msg_iov; struct msghdr msg_header; msg_iov.iov_base = data; msg_iov.iov_len = size; msg_header.msg_name = NULL; msg_header.msg_namelen = 0; msg_header.msg_iov = &msg_iov; msg_header.msg_iovlen = 1; msg_header.msg_control = NULL; msg_header.msg_controllen = 0; msg_header.msg_flags = 0; ret = sendmsg(s, &msg_header, 0); if (ret<0) { Debug("EthPutPacket: ret:%d errno:%d size:%d\n", ret, errno, size); } } #endif // UNIX_LINUX #endif //BRIDGE_PCAP Free(data); }