Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
12748 Discussions

FireFly + LWIP + Opencores EMAC problems

Altera_Forum
Honored Contributor II
1,200 Views

Hi All, 

 

I'm trying to establish a TCP-connection between Firefly dev.Kit (client) and my laptop (server). I'm using Microtronix Firefly dev.kit, opencores ethernet EMAC (microtronix also) and LWIP (microtronix also). I have gonfigured the example software project lwip_web_server so that only static IP address option is ON and the DHCP is OFF. The static IP address for Firefly-module is configured succesfully but there is a problem to establish a tcp-socket connection between Firefly-module and laptop.  

 

I have sniffed ETH traffic between client and server and I noticed that the client finds the server and sends only TCP SYN -messages. The server replies with SYN-ACK messages, but the client doesn't get those messages because it doesn't anwer to those messages with ACK-messages. It looks like the client can't receive any messages. 

 

Regards, 

CoolMan
0 Kudos
2 Replies
Altera_Forum
Honored Contributor II
390 Views

Hi, 

I have the same situation. If i turn on DHCP that will be fine, except getting failure from DHCP server. So, i use static IP and trun off DHCP but it doesn't work. I also use Microtronix Ethernet-USB expansion board and Mircotronix LWIP. 

 

Does anyone can help me to solve this? 

 

Best Regards, 

Sam
0 Kudos
Altera_Forum
Honored Contributor II
390 Views

Hi Sam, 

 

I have solved the problem by fixing the code of the network_utilities.c file of lwip_webserver example. The updated code listing of functions get_ip_addr and dhcp_timeout_task are listed below. Updated parts of the file are between "/********************/" -rows. 

 

The bug was that if static ip was used there wasn&#39;t any eth adapter working as default eth-interface. http://forum.niosforum.com/work2/style_emoticons/<#EMO_DIR#>/ohmy.gif  

 

Regards,  

CoolMan 

 

----------------------UPDATED CODE START------------------------------- 

 

int get_ip_addr(alt_lwip_dev* lwip_dev, struct ip_addr* ipaddr,  

struct ip_addr* netmask, struct ip_addr* gw, 

int* use_dhcp) 

int ret_code = 0; 

 

 

if (!strcmp(lwip_dev->name, "/dev/" LWIP_DEFAULT_IF)) 

{# if LWIP_DHCP == 1 

*use_dhcp = 1; 

 

/* 

* If we are telling LWIP to attempt DHCP, all that is needed is to save  

* the the LWIP device in question to a the global netif "adapter"; the  

* DHCP timeout task will then querry this device to see whether an IP 

* address has been set. 

*  

* If we are not attempting DHCP, static network settings are assigned here 

* and we go on our merry way. 

*/ 

adapter = lwip_dev->netif; 

# ifdef LCD_DISPLAY_NAME  

/* Clear the LCD screen */ 

fprintf(lcdDevice, "\x1b"); 

fprintf(lcdDevice, "[2J"); 

fprintf(lcdDevice, "Using DHCP to\nfind IP Addr");# endif /* LCD_DISPLAY_NAME */ 

printf("Using DHCP to find an IP Address\n"); 

# else 

 

/***********************************************************/ 

//TOP 7.2.2007 

adapter = lwip_dev->netif; 

/***********************************************************/ 

 

IP4_ADDR(ipaddr, IPADDR0,IPADDR1,IPADDR2,IPADDR3); 

IP4_ADDR(gw, GWADDR0,GWADDR1,GWADDR2,GWADDR3); 

IP4_ADDR(netmask, MSKADDR0,MSKADDR1,MSKADDR2,MSKADDR3); 

*use_dhcp = 0; 

 

printf("Static IP Address is %d.%d.%d.%d\n",  

ip4_addr1(ipaddr), 

ip4_addr2(ipaddr), 

ip4_addr3(ipaddr), 

ip4_addr4(ipaddr)); 

 

/***********************************************************/ 

//TOP 7.2.2007 

netif_set_default(adapter); 

//TOP 7.2.2007 

netif_set_up(adapter); 

/***********************************************************/ 

# ifdef LCD_DISPLAY_NAME  

/* Clear the LCD screen */ 

fprintf(lcdDevice, "\x1b"); 

fprintf(lcdDevice, "[2J"); 

fprintf(lcdDevice, "Static IP Addr\n %d.%d.%d.%d", 

ip4_addr1(ipaddr), 

ip4_addr2(ipaddr), 

ip4_addr3(ipaddr), 

ip4_addr4(ipaddr));# endif /* LCD_DISPLAY_NAME */ 

# endif /* LWIP_DHCP */ 

 

ret_code = 1; 

 

return ret_code; 

 

/* 

* dhcp_timeout_task() 

*  

* This LWIP-called routine is responsible for checking to see whether DHCP  

* was sucessful. Here we check to see whether a timeout (120 seconds in this 

* case) has elapsed. If so, display an error, assign a static address, and  

* bail out. If not, continue checking for DHCP success and bail out once 

* a DHCP address assignment is complete. 

*  

* This routine also displays the assigned IP address to the user (via STDOUT  

* and, if equipped, LCD screen. 

*  

* Note: LCD_DISPLAY_NAME is defined in user.h to be the LCD interface for 

* the "standard" example design. 

*/# if LWIP_DHCP == 1 

 

void dhcp_timeout_task() 

static int have_address = 0, timeout_dhcp = 0; 

struct ip_addr ipaddr, netmask, gw; 

 

if (!have_address) 

/*  

* For demo purposes we need to use DHCP to allocate an IP Address 

* and LWIP had no mechanism to tell us one is allocated. Wait two  

* minutes if we don&#39;t have one we use a static IP address 

*/ 

if(timeout_dhcp < 120) 

timeout_dhcp++; 

if (!ip_addr_isany(&adapter->ip_addr)) 

have_address = 1; 

printf("Assigned IP Address is %d.%d.%d.%d\n\n", 

ip4_addr1(&adapter->ip_addr), 

ip4_addr2(&adapter->ip_addr), 

ip4_addr3(&adapter->ip_addr), 

ip4_addr4(&adapter->ip_addr)); 

# ifdef LCD_DISPLAY_NAME  

lcdDevice = fopen(LCD_DISPLAY_NAME, "w"); 

/* Clear screen */ 

fprintf(lcdDevice, "\x1b"); 

fprintf(lcdDevice, "[2J"); 

fprintf(lcdDevice, "DHCP IP Addr is \n %d.%d.%d.%d", 

ip4_addr1(&adapter->ip_addr), 

ip4_addr2(&adapter->ip_addr), 

ip4_addr3(&adapter->ip_addr), 

ip4_addr4(&adapter->ip_addr)); 

fclose(lcdDevice);# endif /* LCD_DISPLAY_NAME */ 

/* 

* You&#39;re in a bit of trouble if this happens, you could assign a static 

* IP address but how do we choose it? 

*/ 

else 

dhcp_stop(adapter); 

IP4_ADDR(&ipaddr, IPADDR0,IPADDR1,IPADDR2,IPADDR3); 

IP4_ADDR(&gw, GWADDR0,GWADDR1,GWADDR2,GWADDR3); 

IP4_ADDR(&netmask, MSKADDR0,MSKADDR1,MSKADDR2,MSKADDR3); 

 

netif_set_addr( adapter,&ipaddr, &netmask, &gw); 

have_address = 1; 

 

printf("DHCP Failed to assign an IP Address\n");  

printf("Using static address: %d.%d.%d.%d\n\n", 

ip4_addr1(&adapter->ip_addr), 

ip4_addr2(&adapter->ip_addr), 

ip4_addr3(&adapter->ip_addr), 

ip4_addr4(&adapter->ip_addr)); 

 

 

/***********************************************************/  

//TOP 7.2.2007 

netif_set_default(adapter); 

//TOP 7.2.2007 

netif_set_up(adapter); 

/***********************************************************/ 

# ifdef LCD_DISPLAY_NAME  

lcdDevice = fopen(LCD_DISPLAY_NAME, "w"); 

/* Clear the LCD screen */ 

fprintf(lcdDevice, "\x1b"); 

fprintf(lcdDevice, "[2J"); 

fprintf(lcdDevice, "DHCP Failed using\n %d.%d.%d.%d", 

ip4_addr1(&adapter->ip_addr), 

ip4_addr2(&adapter->ip_addr), 

ip4_addr3(&adapter->ip_addr), 

ip4_addr4(&adapter->ip_addr)); 

fclose(lcdDevice);# endif /* LCD_DISPLAY_NAME */ 

}# endif /* LWIP_DHCP */ 

 

----------------------UPDATED CODE END------------------------------ 

 

 

 

--- Quote Start ---  

originally posted by samlittle@Jan 19 2007, 04:26 AM 

hi, 

i have the same situation. if i turn on dhcp that will be fine, except getting failure from dhcp server. so, i use static ip and trun off dhcp but it doesn&#39;t work. i also use microtronix ethernet-usb expansion board and mircotronix lwip. 

 

does anyone can help me to solve this? 

 

best regards, 

sam 

<div align='right'><{post_snapback}> (index.php?act=findpost&pid=20711) 

--- quote end ---  

 

--- Quote End ---  

0 Kudos
Reply