From: Jack Lange Date: Tue, 16 Sep 2008 19:24:45 +0000 (+0000) Subject: fixed socket bug added network X-Git-Tag: 1.0~33 X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=6d967c202c0afba89cc4a279118ed36ea3d5bf04;hp=eb7dda8d4a92a2e8d0c8f867c65317d756ca6c11;p=palacios.git fixed socket bug added network --- diff --git a/palacios/build/Makefile b/palacios/build/Makefile index 9f0f862..8e57036 100644 --- a/palacios/build/Makefile +++ b/palacios/build/Makefile @@ -1,6 +1,6 @@ # Makefile for GeekOS kernel, userspace, and tools # Copyright (c) 2004,2005 David H. Hovemeyer -# $Revision: 1.70 $ +# $Revision: 1.71 $ # This is free software. You are permitted to use, # redistribute, and modify it as specified in the file "COPYING". @@ -230,9 +230,9 @@ KERNEL_C_SRCS := idt.c int.c trap.c irq.c io.c \ serial.c reboot.c \ paging.c \ debug.c vmm_stubs.c vm.c pci.c\ - queue.c ring_buffer.c \ + queue.c socket.c net.c ring_buffer.c \ main.c - #socket.c + # Kernel object files built from C source files KERNEL_C_OBJS := $(KERNEL_C_SRCS:%.c=geekos/%.o) diff --git a/palacios/include/geekos/socket.h b/palacios/include/geekos/socket.h index 77c20b8..80dac37 100644 --- a/palacios/include/geekos/socket.h +++ b/palacios/include/geekos/socket.h @@ -20,7 +20,7 @@ struct socket { }; -void init_network(); +void init_socket_layer(); int connect(const uchar_t ip_addr[4], ushort_t port); int close(const int sockfd); diff --git a/palacios/src/geekos/main.c b/palacios/src/geekos/main.c index 5e1d714..43987f0 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.46 $ + * $Revision: 1.47 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". @@ -38,42 +38,14 @@ #include -#if 0 -#include -#include -#include -#endif -#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() { @@ -249,58 +221,8 @@ void Main(struct Boot_Info* bootInfo) Init_Stubs(); -#if 0 - { - init_network(); - uchar_t local_addr[4]; - uchar_t remote_addr[4]; - - local_addr[0] = 10; - local_addr[1] = 0; - local_addr[2] = 2; - local_addr[3] = 21; - - set_ip_addr(local_addr); - - remote_addr[0] = 10; - remote_addr[1] = 0; - remote_addr[2] = 2; - remote_addr[3] = 20; - - - connect(remote_addr, 4301); - } -#elif 0 - 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 */ + Init_Network(); -#endif /* TEST_NE2K */ // Init_IDE(); diff --git a/palacios/src/geekos/socket.c b/palacios/src/geekos/socket.c index 0301b93..2dca02d 100644 --- a/palacios/src/geekos/socket.c +++ b/palacios/src/geekos/socket.c @@ -26,7 +26,7 @@ void socket_appcall(void); static int Packet_Received(struct NE2K_Packet_Info* info, uchar_t *pkt); static void periodic_caller(int timer_id); -void init_network() { +void init_socket_layer() { int i = 0; bool iflag; @@ -149,7 +149,7 @@ int connect(const uchar_t ip_addr[4], ushort_t port) { PrintBoth("Connection start\n"); - Wait(&(sock->recv_wait_queue)); + Wait(&(sockets[sockfd].recv_wait_queue)); PrintBoth("Connected\n");