I'm continuing work on getting a machine to send packets to itself
over external interfaces. Arp and UDP now work with a few small hacks,
as hinted to by Alexey....
TCP/IP is not working as well as I had hoped. After binding to the
interface, and opening a listening socket, I attempt to connect. I
see the first packet go across the looped back wire, but I can get
no response to the initial SYN packet. From printks in the kernel, I
see that this code is hit in tcp_v4_do_rcv:
if (sk->state == TCP_LISTEN) {
struct sock *nsk = tcp_v4_hnd_req(sk, skb);
printk("tcp_v4_do_rcv: listen, saddr: %x, nsk: %p, sk: %p\n",
skb->nh.iph->saddr, nsk, sk);
if (!nsk)
goto discard;
if (nsk != sk) {
if (tcp_child_process(sk, nsk, skb))
goto reset;
return 0;
}
}
nsk is null, because this code is hit in tcp_check_req (tcp_v4_search_req found something):
/* RFC793 page 36: "If the connection is in any non-synchronized state ...
* and the incoming segment acknowledges something not yet
* sent (the segment carries an unaccaptable ACK) ...
* a reset is sent."
*/
if (!(flg & TCP_FLAG_ACK)) {
if ((skb->nh.iph->saddr == 0x7102a8c0) || (skb->nh.iph->saddr == 0x7002a8c0)) {
printk("not TCP_FLAG_ACK, flg: 0x%x...\n", flg);
}
return NULL;
}
From my old networking book, it appears that the first packet does not
need the ACK flag. A network trace of a connection between two computers
does not show the ACK flag in the first packet...
I am using SO_BINDTODEVICE on the connecting and accepting sockets, I'm
also using source-based routing.
Any suggestions would be welcome, of course!
Here is the wire capture of the attempted connection:
Frame 1 (74 on wire, 74 captured)
Arrival Time: Sep 13, 2002 22:34:26.679702000
Time delta from previous packet: 0.000000000 seconds
Time relative to first packet: 0.000000000 seconds
Frame Number: 1
Packet Length: 74 bytes
Capture Length: 74 bytes
Ethernet II
Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.2.112 (192.168.2.112), Dst Addr: 192.168.2.113 (192.168.2.113)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 60
Identification: 0xbc8a
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xf7ff (correct)
Source: 192.168.2.112 (192.168.2.112)
Destination: 192.168.2.113 (192.168.2.113)
Transmission Control Protocol, Src Port: 33039 (33039), Dst Port: 33040 (33040), Seq: 931994439, Ack: 0, Len: 0
Source port: 33039 (33039)
Destination port: 33040 (33040)
Sequence number: 931994439
Header length: 40 bytes
Flags: 0x00c2 (SYN, ECN, CWR)
1... .... = Congestion Window Reduced (CWR): Set
.1.. .... = ECN-Echo: Set
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 5840
Checksum: 0xad83 (correct)
Options: (20 bytes)
Maximum segment size: 1460 bytes
SACK permitted
Time stamp: tsval 42957, tsecr 0
NOP
Window scale: 0 bytes
Frame 2 (74 on wire, 74 captured)
Arrival Time: Sep 13, 2002 22:34:29.669918000
Time delta from previous packet: 2.990216000 seconds
Time relative to first packet: 2.990216000 seconds
Frame Number: 2
Packet Length: 74 bytes
Capture Length: 74 bytes
Ethernet II
Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.2.112 (192.168.2.112), Dst Addr: 192.168.2.113 (192.168.2.113)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 60
Identification: 0xbc8b
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xf7fe (correct)
Source: 192.168.2.112 (192.168.2.112)
Destination: 192.168.2.113 (192.168.2.113)
Transmission Control Protocol, Src Port: 33039 (33039), Dst Port: 33040 (33040), Seq: 931994439, Ack: 0, Len: 0
Source port: 33039 (33039)
Destination port: 33040 (33040)
Sequence number: 931994439
Header length: 40 bytes
Flags: 0x00c2 (SYN, ECN, CWR)
1... .... = Congestion Window Reduced (CWR): Set
.1.. .... = ECN-Echo: Set
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 5840
Checksum: 0xac57 (correct)
Options: (20 bytes)
Maximum segment size: 1460 bytes
SACK permitted
Time stamp: tsval 43257, tsecr 0
NOP
Window scale: 0 bytes
Frame 3 (42 on wire, 42 captured)
Arrival Time: Sep 13, 2002 22:34:31.669777000
Time delta from previous packet: 1.999859000 seconds
Time relative to first packet: 4.990075000 seconds
Frame Number: 3
Packet Length: 42 bytes
Capture Length: 42 bytes
Ethernet II
Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Type: ARP (0x0806)
Address Resolution Protocol (request)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (0x0001)
Sender MAC address: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Sender IP address: 192.168.2.112 (192.168.2.112)
Target MAC address: 00:00:00:00:00:00 (XEROX_00:00:00)
Target IP address: 192.168.2.113 (192.168.2.113)
Frame 4 (60 on wire, 60 captured)
Arrival Time: Sep 13, 2002 22:34:31.670014000
Time delta from previous packet: 0.000237000 seconds
Time relative to first packet: 4.990312000 seconds
Frame Number: 4
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Source: 00:07:e9:09:62:ee (Intel_09:62:ee)
Type: ARP (0x0806)
Trailer: 00000000000000000000000000000000...
Address Resolution Protocol (reply)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (0x0002)
Sender MAC address: 00:07:e9:09:62:ee (Intel_09:62:ee)
Sender IP address: 192.168.2.113 (192.168.2.113)
Target MAC address: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
Target IP address: 192.168.2.112 (192.168.2.112)
-- Ben Greear <greearb@candelatech.com> <Ben_Greear AT excite.com> President of Candela Technologies Inc http://www.candelatech.com ScryMUD: http://scry.wanfear.com http://scry.wanfear.com/~greear- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sun Sep 15 2002 - 22:00:36 EST