return 0;
}
+static inline int BuildEthernetVLAN(libnet_t *c, Libnet11Packet *lpacket, uint16_t proto, uint16_t vlan_id)
+{
+ if (libnet_build_802_1q(
+ lpacket->dmac, lpacket->smac, ETHERTYPE_VLAN,
+ 0x000, 0x000, vlan_id, proto,
+ NULL, /* payload */
+ 0, /* payload size */
+ c, /* libnet handle */
+ 0) < 0)
+ {
+ SCLogError(SC_ERR_LIBNET_BUILD_FAILED,"libnet_build_802_1q %s", libnet_geterror(c));
+ return -1;
+ }
+ return 0;
+}
+
int RejectSendLibnet11IPv4TCP(ThreadVars *tv, Packet *p, void *data, int dir)
{
Libnet11Packet lpacket;
if (t_inject_mode == LIBNET_LINK) {
SetupEthernet(p, &lpacket, dir);
- if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IP) < 0)
- goto cleanup;
+
+ if (p->vlan_idx == 1) {
+ if (BuildEthernetVLAN(c, &lpacket, ETHERNET_TYPE_IP, p->vlan_id[0]) < 0)
+ goto cleanup;
+ } else {
+ if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IP) < 0)
+ goto cleanup;
+ }
}
result = libnet_write(c);
if (t_inject_mode == LIBNET_LINK) {
SetupEthernet(p, &lpacket, dir);
- if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IP) < 0)
- goto cleanup;
+
+ if (p->vlan_idx == 1) {
+ if (BuildEthernetVLAN(c, &lpacket, ETHERNET_TYPE_IP, p->vlan_id[0]) < 0)
+ goto cleanup;
+ } else {
+ if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IP) < 0)
+ goto cleanup;
+ }
}
result = libnet_write(c);
if (t_inject_mode == LIBNET_LINK) {
SetupEthernet(p, &lpacket, dir);
- if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IPV6) < 0)
- goto cleanup;
+ if (p->vlan_idx == 1) {
+ if (BuildEthernetVLAN(c, &lpacket, ETHERNET_TYPE_IPV6, p->vlan_id[0]) < 0)
+ goto cleanup;
+ } else {
+ if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IPV6) < 0)
+ goto cleanup;
+ }
}
result = libnet_write(c);
if (t_inject_mode == LIBNET_LINK) {
SetupEthernet(p, &lpacket, dir);
- if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IPV6) < 0)
- goto cleanup;
+ if (p->vlan_idx == 1) {
+ if (BuildEthernetVLAN(c, &lpacket, ETHERNET_TYPE_IPV6, p->vlan_id[0]) < 0)
+ goto cleanup;
+ } else {
+ if (BuildEthernet(c, &lpacket, ETHERNET_TYPE_IPV6) < 0)
+ goto cleanup;
+ }
}
result = libnet_write(c);