--- a/eth_proto.c Sun Feb 17 21:03:23 2008 +0100
+++ b/eth_proto.c Sun Feb 17 22:27:55 2008 +0100
@@ -16,7 +16,7 @@
enum {
MAXPACKET = 1500,
MAXSEQ = 100,
- HEAD = 9
+ HEAD = 13
};
static struct
@@ -31,6 +31,7 @@
unsigned int wrong_recv;
char send_buffer[MAXPACKET];
int send_buffer_size;
+ int port;
} edata;
enum Control {
@@ -48,17 +49,20 @@
{
*((unsigned int *) data) = htonl(seq);
data[4] = (unsigned char) c;
- *((unsigned int *)(data+5)) = htonl(size);
+ *((unsigned int *)(data+5)) = htonl(edata.port);
+ *((unsigned int *)(data+5+4)) = htonl(size);
return HEAD;
}
static int parse_head(unsigned char *data, unsigned int *seq, enum Control *c,
- int *size)
+ int *port, int *size)
{
*seq = ntohl( *((unsigned int*) data) );
*c = data[4];
+ if (port)
+ *port = ntohl(*((unsigned int *)(data+5)));
if (size)
- *size = ntohl(*((unsigned int *)(data+5)));
+ *size = ntohl(*((unsigned int *)(data+5+4)));
return HEAD;
}
@@ -70,6 +74,7 @@
void eth_proto_init()
{
edata.socket = -1;
+ edata.port = command_line.eth_port;
edata.seq_send = 0;
edata.seq_wait = 0;
edata.send_acked = 1; /* Fine at the beginning, as if the last data was acked */
@@ -125,6 +130,7 @@
int res;
int seq;
int data_length;
+ int port;
enum Control c;
char partner[6];
@@ -132,7 +138,10 @@
res = eth_recv(eth_buffer, sizeof(eth_buffer), partner);
edata.partner_set = 1;
} while(res < HEAD);
- parse_head(eth_buffer, &seq, &c, &data_length);
+ parse_head(eth_buffer, &seq, &c, &port, &data_length);
+ if (port != edata.port)
+ return -1; /* Nothing the parent should care about. Not a packet for us. */
+
/* We admit any first connection */
if (seq == 0 && c == INIT)
{