X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fmain.c;h=f6595e8ef9d64f83e381f03fd465536d4e082b15;hb=f84bd0ca67af7c0a1143d5e279e0af408729128e;hp=ba1b4d679d9a67b49efcf6509ba9d6e7eaf8f836;hpb=57e3d7d1e671a261befef967b4a441e5d7dc2303;p=palacios.git diff --git a/palacios/src/geekos/main.c b/palacios/src/geekos/main.c index ba1b4d6..f6595e8 100644 --- a/palacios/src/geekos/main.c +++ b/palacios/src/geekos/main.c @@ -3,7 +3,7 @@ * Copyright (c) 2001,2003,2004 David H. Hovemeyer * Copyright (c) 2003, Jeffrey K. Hollingsworth * Copyright (c) 2004, Iulian Neamtiu - * $Revision: 1.40 $ + * $Revision: 1.43 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". @@ -38,10 +38,37 @@ #include - +#include +#include +#include #define SPEAKER_PORT 0x61 - +#define TEST_NE2K 0 +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +#if TEST_NE2K +u8_t uip_buf[UIP_BUFSIZE+2]; +u16_t uip_len; + +int Packet_Received(struct NE2K_Packet_Info* info, uchar_t *pkt) { + uip_len = info->size; + int i; + for(i = 0; i < info->size; i++) { + PrintBoth("%x ", *(pkt+i)); + uip_buf[i] = *(pkt+i); + if(i % 10 == 0) + PrintBoth("\n"); + } + Free(pkt); + if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + } else { + uip_arp_ipin(); + uip_input(); + } + return 0; +} +#endif void Spin() { @@ -217,6 +244,38 @@ void Main(struct Boot_Info* bootInfo) Init_Stubs(); +#if TEST_NE2K + Init_Ne2k(&Packet_Received); + uip_init(); + uip_arp_init(); + + uip_ipaddr_t ipaddr; + uip_ipaddr(ipaddr, 10,0,2,21); /* Local IP address */ + uip_sethostaddr(ipaddr); + + uip_ipaddr_t ripaddr; + uip_ipaddr(ripaddr, 10,0,2,20); /* Remote IP address */ + + /* Attempt a connection to port 8080 at address 10.0.2.20 */ + struct uip_conn *conn; + conn = uip_connect(&ripaddr, HTONS(8080)); + + while(uip_len <= 0) { + uip_periodic_conn(conn); + } + NE2K_Transmit(uip_len+UIP_LLH_LEN); /* This will transmit an ARP packet */ + + int l = 0; + while(l++ < 5000); /* When this is done, a response to the ARP should have been received. */ + conn = uip_connect(&ripaddr, HTONS(8080)); + + while(uip_len <= 0) { + uip_periodic_conn(conn); + } + NE2K_Transmit(uip_len+UIP_LLH_LEN); /* This *should* transmit a SYN packet */ + +#endif /* TEST_NE2K */ + // Init_IDE(); // Print("Done; stalling\n"); @@ -261,9 +320,11 @@ void Main(struct Boot_Info* bootInfo) } #endif +#if !TEST_NE2K { RunVMM(bootInfo); } +#endif SerialPrint("RunVMM returned, spinning\n");