#
#TCPSTACK, uIP is used currently
#
-TCPSTACK=UIP
+UIP=ON
+
+#
+#LWIP, ON -- used, OFF -- not used
+#
+LWIP=ON
#
#RAMDISK
V3LIBS := $(DECODER_LIBS)
-TCPSTACK_C_SRCS := psock.c timer.c uip_arp.c uip.c uip-fw.c uiplib.c uip-neighbor.c uip-split.c resolv.c
-TCPSTACK_C_OBJS := $(TCPSTACK_C_SRCS:%.c=net/%.o)
-TCPSTACK_OBJS := $(TCPSTACK_C_OBJS)
+ifeq ($(UIP),ON)
+ UIP_C_SRCS := psock.c timer.c uip_arp.c uip.c uip-fw.c uiplib.c uip-neighbor.c uip-split.c resolv.c
+ UIP_C_OBJS := $(UIP_C_SRCS:%.c=net/%.o)
+else
+ UIP_C_SRCS :=
+ UIP_C_OBJS :=
+endif
+
+ifeq ($(LWIP),ON)
+ LWIP_OBJS := lwip/*.o
+else
+ LWIP_OBJS :=
+endif
+
+TCPSTACK_OBJS := $(UIP_C_OBJS) $(LWIP_OBJS)
vgabios_link:
ln -s -f ../src/vmboot/vgabios/VGABIOS-lgpl-latest.bin vgabios
+force_lwip:
+ (cd ../src/lwip/build; make clean; make)
+
force_rombios: rombios_link
(cd ../src/vmboot/rombios; make clean; make)
force_payload: force_rombios force_vgabios
../scripts/make_payload.pl payload_layout.txt vm_kernel
-inter1: force_payload
+inter1: force_payload force_lwip
-make clean
world: inter1 vmm.img
void Micro_Delay(int us);
+ulong_t clock_time(void); //return elipsed millisecs
+
#endif /* GEEKOS_TIMER_H */
#define PERF_STOP(x) /* null definition */
#endif /* PERF */
+#if 0
+
void perf_print(unsigned long c1l, unsigned long c1h,
unsigned long c2l, unsigned long c2h,
char *key);
void perf_init(char *fname);
+#endif
+
#endif /* __ARCH_PERF_H__ */
//PrintDebug("In fflush!!\n");
return 0;
-}*/
+}
void abort(void)
{
}
/*
+ * Destroy Mutex
+ */
+void Mutex_Destroy(struct Mutex* mutex)
+{
+
+
+}
+
+/*
+ * Condition Destroy
+ */
+void Cond_Destroy(struct Condition* cond)
+{
+
+
+}
+
+/*
* Initialize given condition.
*/
void Cond_Init(struct Condition* cond)
*/
volatile ulong_t g_numTicks;
-ulong_t clock_time(void){
- return g_numTicks;
-}
-
-
/*
* Number of times the spin loop can execute during one timer tick
*/
# define Debug(args...)
#endif
+ulong_t clock_time(void){//in millisec
+ return g_numTicks * (1000/HZ);
+}
+
/* ----------------------------------------------------------------------
* Private functions
* ---------------------------------------------------------------------- */
* will block until there is more room instead of just
* leaking messages.
*/
+/*
+ * Modified by Lei Xia (lxia@northwestern.edu) to fit to Palacios, 9/29/2008
+ */
#include "lwip/debug.h"
#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pthread.h>
+#include <palacios/vmm.h>
#include <geekos/synch.h>
#include <geekos/kthread.h>
-#include <palacios/vmm.h>
#include <geekos/debug.h>
+#include <geekos/timer.h>
+#include <geekos/malloc.h>
#include "lwip/sys.h"
#include "lwip/opt.h"
};
-static struct timeval starttime;
+//static struct timeval starttime;
//static pthread_mutex_t lwprot_mutex = PTHREAD_MUTEX_INITIALIZER;
static struct Mutex lwprot_mutex; // !!!! need to be initiated, void Mutex_Init(struct Mutex* mutex);
//static pthread_t lwprot_thread = (pthread_t) 0xDEAD;
-static struct Kernel_Thread lwprot_thread = (struct Kernel_Thread) 0xDEAD; //!!!!! how to set it to a NULL thread?
+//static struct Kernel_Thread lwprot_thread = (struct Kernel_Thread) 0xDEAD; //!!!!! how to set it to a NULL thread?
-static int lwprot_count = 0;
+//static int lwprot_count = 0;
static struct sys_sem *sys_sem_new_(u8_t count);
static void sys_sem_free_(struct sys_sem *sem);
{
struct sys_thread *thread;
- thread = (struct sys_thread *)V3_Malloc(sizeof(struct sys_thread));
+ thread = (struct sys_thread *)Malloc(sizeof(struct sys_thread));
if (thread != NULL) {
//pthread_mutex_lock(&threads_mutex);
sys_thread_t
sys_thread_new(char *name, void (* function)(void *arg), void *arg, int stacksize, int prio)
{
- int code;
+ //int code;
//pthread_t tmp;
struct Kernel_Thread *tmp;
struct sys_thread *st = NULL;
- //tmp = (struct Kernel_Thread *)V3_Malloc(sizeof(struct Kernel_Thread));
+ //tmp = (struct Kernel_Thread *)Malloc(sizeof(struct Kernel_Thread));
/* code = pthread_create(&tmp,
NULL,
{
struct sys_mbox *mbox;
- mbox = (struct sys_mbox *)V3_Malloc(sizeof(struct sys_mbox));
+ mbox = (struct sys_mbox *)Malloc(sizeof(struct sys_mbox));
if (mbox != NULL) {
mbox->first = mbox->last = 0;
mbox->mail = sys_sem_new_(0);
mbox->mail = mbox->mutex = NULL;
/* LWIP_DEBUGF("sys_mbox_free: mbox 0x%lx\n", mbox); */
- V3_Free(mbox);
+ Free(mbox);
}
}
/*-----------------------------------------------------------------------------------*/
{
struct sys_sem *sem;
- sem = (struct sys_sem *)V3_Malloc(sizeof(struct sys_sem));
+ sem = (struct sys_sem *)Malloc(sizeof(struct sys_sem));
if (sem != NULL) {
sem->c = count;
//pthread_mutex_destroy(&(sem->mutex));
Mutex_Destroy(&(sem->mutex));
- V3_Free(sem);
+ Free(sem);
}
#if 0
thread = current_thread();
return &thread->timeouts;
}
+
+
/*-----------------------------------------------------------------------------------*/
/** sys_prot_t sys_arch_protect(void)
sys_arch_protect() is only required if your port is supporting an operating
system.
*/
+
+#if 0
sys_prot_t
sys_arch_protect(void)
{
{
if (--lwprot_count == 0)
{
- lwprot_thread = (Kernel_Thread) 0xDEAD;
+ lwprot_thread = (struc Kernel_Thread) 0xDEAD;
Mutex_Unlock(&lwprot_mutex);
}
}
}
+#endif
/*-----------------------------------------------------------------------------------*/
#define HZ 100
#endif
+#if 0
unsigned long
sys_jiffies(void)
{
usec /= 1000000L / HZ;
return HZ * sec + usec;
}
+#endif
#if PPP_DEBUG
va_start(args, format);
//vprintf(format, args);
- SerialPrintList(format, args);
+ PrintDebug(format, args);
va_end(args);
}
# COREFILES, CORE4FILES: The minimum set of files needed for lwIP.
COREFILES=$(LWIPDIR)/core/mem.c $(LWIPDIR)/core/memp.c $(LWIPDIR)/core/netif.c \
$(LWIPDIR)/core/pbuf.c $(LWIPDIR)/core/stats.c $(LWIPDIR)/core/sys.c \
- $(LWIPDIR)/core/tcp.c $(LWIPDIR)/core/tcp_in.c \
+ $(LWIPDIR)/core/tcp.c $(LWIPDIR)/core/tcp_in.c $(LWIPDIR)/core/raw.c\
$(LWIPDIR)/core/tcp_out.c $(LWIPDIR)/core/udp.c $(LWIPDIR)/core/init.c
CORE4FILES=$(LWIPDIR)/core/ipv4/icmp.c $(LWIPDIR)/core/ipv4/ip.c \
$(LWIPDIR)/core/ipv4/inet.c $(LWIPDIR)/core/ipv4/ip_addr.c \
- $(LWIPDIR)/core/ipv4/inet_chksum.c
+ $(LWIPDIR)/core/ipv4/inet_chksum.c $(LWIPDIR)/core/ipv4/ip_frag.c
# APIFILES: The files which implement the sequential and socket APIs.
LWIPFILESW=$(wildcard $(LWIPFILES))
LWIPOBJS=$(notdir $(LWIPFILESW:.c=.o))
-#LWIPLIB=lwip.o
+# LWIPLIB=lwip.o
%.o:
$(CC) $(CFLAGS) -c $(LWIPFILES)
-all: $(LWIPOBJS)
+all: $(LWIPOBJS)
cp *.o $(PROJECT_ROOT)build/lwip/
.PHONY: all
clean:
- rm -f *.o $(LWIPLIB) *.s .depend* *.core
+ rm -f *.o .depend*
depend dep: .depend
include .depend
-##$(LWIPLIB): $(LWIPOBJS)
-## $(CC) -g -nostartfiles -shared -static $^ -o $@
+# $(LWIPLIB): $(LWIPOBJS)
+# $(CC) -g -nostartfiles -shared -static $^ -o $@
.depend: $(LWIPFILES)
$(CC) $(CFLAGS) -MM $^ > .depend || rm -f .depend
uip_flags = 0;
return;
}
+
/*---------------------------------------------------------------------------*/
+/* replicate defined in lwip.c,
u16_t
htons(u16_t val)
{
return HTONS(val);
}
+*/
+
/*---------------------------------------------------------------------------*/
void
uip_send(const void *data, int len)