25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: net.c,v 1.80 2005/08/12 05:49:46 debug Exp $ |
* $Id: net.c,v 1.84 2005/11/25 03:38:00 debug Exp $ |
29 |
* |
* |
30 |
* Emulated (ethernet / internet) network support. |
* Emulated (ethernet / internet) network support. |
31 |
* |
* |
172 |
macbuf[4] = 0; |
macbuf[4] = 0; |
173 |
macbuf[5] = machine->serial_nr << 4; |
macbuf[5] = machine->serial_nr << 4; |
174 |
|
|
175 |
|
if (macbuf[0] & 1 || macbuf[5] & 1) { |
176 |
|
fatal("Internal error in net_generate_unique_mac().\n"); |
177 |
|
exit(1); |
178 |
|
} |
179 |
|
|
180 |
/* TODO: Remember the mac addresses somewhere? */ |
/* TODO: Remember the mac addresses somewhere? */ |
181 |
machine->nr_of_nics ++; |
machine->nr_of_nics ++; |
182 |
} |
} |
1435 |
if (memcmp(packet+24, net->gateway_ipv4_addr, 4) != 0) |
if (memcmp(packet+24, net->gateway_ipv4_addr, 4) != 0) |
1436 |
break; |
break; |
1437 |
|
|
1438 |
lp = net_allocate_packet_link(net, extra, len + 14); |
lp = net_allocate_packet_link(net, extra, 60 + 14); |
1439 |
|
|
1440 |
/* Copy the old packet first: */ |
/* Copy the old packet first: */ |
1441 |
|
memset(lp->data, 0, 60 + 14); |
1442 |
memcpy(lp->data + 14, packet, len); |
memcpy(lp->data + 14, packet, len); |
1443 |
|
|
1444 |
/* Add ethernet ARP header: */ |
/* Add ethernet ARP header: */ |
1459 |
|
|
1460 |
break; |
break; |
1461 |
case 3: /* Reverse Request */ |
case 3: /* Reverse Request */ |
1462 |
lp = net_allocate_packet_link(net, extra, len + 14); |
lp = net_allocate_packet_link(net, extra, 60 + 14); |
1463 |
|
|
1464 |
/* Copy the old packet first: */ |
/* Copy the old packet first: */ |
1465 |
|
memset(lp->data, 0, 60 + 14); |
1466 |
memcpy(lp->data + 14, packet, len); |
memcpy(lp->data + 14, packet, len); |
1467 |
|
|
1468 |
/* Add ethernet RARP header: */ |
/* Add ethernet RARP header: */ |
2069 |
|
|
2070 |
/* ARP: */ |
/* ARP: */ |
2071 |
if (packet[12] == 0x08 && packet[13] == 0x06) { |
if (packet[12] == 0x08 && packet[13] == 0x06) { |
2072 |
if (len != 60) |
if (len != 42 && len != 60) |
2073 |
fatal("[ net_ethernet_tx: WARNING! unusual " |
fatal("[ net_ethernet_tx: WARNING! unusual " |
2074 |
"ARP len (%i) ]\n", len); |
"ARP len (%i) ]\n", len); |
2075 |
net_arp(net, extra, packet + 14, len - 14, 0); |
net_arp(net, extra, packet + 14, len - 14, 0); |