GREProtocol::GREProtocol(const in6_addr &src, const in6_addr &dst)
- : seq(0)
{
memset(&dstaddr, 0, sizeof(dstaddr));
dstaddr.sin6_family = AF_INET6;
gre->protocol_type = htons(proto);
char *ptr = buf + sizeof(*gre);
- int seq_be = htonl(seq++); // Ignore incoming_seq.
+ int seq_be = htonl(incoming_seq);
memcpy(ptr, &seq_be, sizeof(seq_be));
ptr += sizeof(seq_be);
} // namespace
TUNProtocol::TUNProtocol(const char *devname)
- : tunfd(tun_open(devname)) {
+ : tunfd(tun_open(devname)), seq(0) {
}
void TUNProtocol::send_packet(uint16_t proto, const string &data, int incoming_seq)
ptr += 2;
//fprintf(stderr, "tun packet: flags=%x proto=%x len=%d\n",
// flags, proto, ret - 4);
- sender->send_packet(proto, string(ptr, buf + ret), -1);
+ sender->send_packet(proto, string(ptr, buf + ret), seq++);
}