INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DHCP Problem lwIP
03.03.2015, 08:06 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2015 08:08 von KK66.)
Beitrag #1
DHCP Problem lwIP
Hallo,

ich habe ein kleines Problem mit der Implementierung von DHCP aus dem lwIP Stack und hoffe, jemand könnte mir helfen!

Hier mal mein Code:
Code:
/* INCLUDES */
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\sam\include\netif\ethernetif.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\include\lwip\tcpip.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\include\lwip\tcp_impl.h"
#include "C:\Program Files (x86)\Arduino\libraries\EMAC-Lib\conf_eth.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\apps\tcpecho_raw\echo.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\include\lwip\init.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\include\lwip\dhcp.h"
#include "C:\Program Files (x86)\Arduino\libraries\Lwip\lwip\src\include\lwip\udp.h"

#if LWIP_DHCP==1
    extern volatile int dhcp_timoutcntr;
#endif
    extern volatile int TxPerfConnMonCntr;
    extern volatile int TcpFastTmrFlag;
    extern volatile int TcpSlowTmrFlag;

/* Funktionen zum ausgeben der Netzwerkkonfiguration */
void print_ip(char *msg, struct ip_addr *ip)
{
    printf(msg);
    printf("%d.%d.%d.%d\r\n", ip4_addr1(ip), ip4_addr2(ip),
            ip4_addr3(ip), ip4_addr4(ip));
}

void print_ip_settings(struct ip_addr *ip, struct ip_addr *mask, struct ip_addr *gw)
{
    puts("\n-------------------------------------");
    print_ip("Board IP:       ", ip);
    print_ip("Netmask :       ", mask);
    print_ip("Gateway :       ", gw);
    puts("-------------------------------------\n");
}

void setup()
{

    Serial.begin(115200);

}

void loop()
{
    /* Lokale Variablen */
    err_t error;
    struct netif *netif, server_netif;
    struct ip_addr ipaddr, netmask, gw;
    struct ip_addr ip_remote;
    struct udp_pcb *udp_1;
    struct pbuf  *p;
    char data[8] = "0123456";
    u16_t  Port = 12;
    int buflen = 8;
    int count = 0;

    /* netif Struktur die Adresse zuweisen */
    netif = &server_netif;

    printf("\r\n\r\n");
    printf("----- \x95 lwIP RAW Application \x95 ------\r\n");

    /* initliaze IP addresses to be used */
#if (LWIP_DHCP==0)
    IP4_ADDR(&ipaddr, 10, 19,   11, 108);
    IP4_ADDR(&netmask, 255, 255, 255,  0);
    IP4_ADDR(&gw,      10, 19,   11,  33);
    print_ip_settings(&ipaddr, &netmask, &gw);
#endif
    
    /* lwIP Stack Init */
    lwip_init();
    puts("lwIP Stack Init");

#if (LWIP_DHCP==1)
    ipaddr.addr = 0;
    gw.addr = 0;
    netmask.addr = 0;
#endif
    
     /* Add network interface to the netif_list, and set it as default */    
    netif = netif_add(netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, ethernet_input);
    if(netif != 0)
    {
        puts("Add network interface");
    }
    else
    {
        puts("Add network interface Error");
    }
    
    netif_set_default(netif);

    /* specify that the network if is up */
    netif_set_up(netif);

#if (LWIP_DHCP==1)
    /* Create a new DHCP client for this interface.
     * Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
     * the predefined regular intervals after starting the client.
     */
    error = dhcp_start(netif);
    if(error != ERR_OK)
    {
        puts("DHCP Start Error");
    }
    else if(error == ERR_OK)
    {
        puts("DHCP Start");
    }

    dhcp_timoutcntr = 24;
    TxPerfConnMonCntr = 0;
    while(((netif->ip_addr.addr) == 0) && (dhcp_timoutcntr > 0)) {
        ethernetif_input(netif);
        if (TcpFastTmrFlag) {
            tcp_fasttmr();
            TcpFastTmrFlag = 0;
        }
        if (TcpSlowTmrFlag) {
            tcp_slowtmr();
            TcpSlowTmrFlag = 0;
        }
    }
    if (dhcp_timoutcntr <= 0) {
        if ((netif->ip_addr.addr) == 0) {
            printf("DHCP Timeout\r\n");
            printf("Configuring default IP of 10.19.11.108\r\n");
            IP4_ADDR(&(netif->ip_addr), 10, 19,   11, 108);
            IP4_ADDR(&(netif->netmask), 255, 255, 255,  0);
            IP4_ADDR(&(netif->gw),      10, 19,   11,  33);
        }
    }
    /* receive and process packets */
    print_ip_settings(&(netif->ip_addr), &(netif->netmask), &(netif->gw));
#endif

    /* TCP Echo Init */
    echo_init();
    puts("TCP Echo Init");
    puts("Setup Done");

    IP4_ADDR(&ip_remote,  10, 19,   11, 107);

    udp_1 = udp_new();

    error = udp_bind(udp_1, IP_ADDR_ANY, Port);
    if (error != 0)
    {
        printf("Bind Failed %d\r\n", error);
    }
    else if (error == 0)
    {
        printf("UDP Bind Success\r\n");
    }

    error = udp_connect(udp_1, &ip_remote, Port);
    if (error != 0)
    {
        printf("Connect Failed %d\r\n", error);
    }
    else if (error == 0)
    {
       printf("UDP Connect Success\r\n");
    }


   while (1)
   {
        ethernetif_input(netif);
        count++;
        if (count == 80000)
        {
            p = pbuf_alloc(PBUF_TRANSPORT, buflen, PBUF_POOL);
            if (!p) {
                printf("error allocating pbuf\r\n");
            }
            memcpy(p->payload, data, buflen);
            udp_send(udp_1, p);
            printf("SEND\r\n");
            count = 0;
            pbuf_free(p);
        }

    }
}
Wenn ich das ausführe bekomme ich diese Ausgaben und IP Adressen:
Code:
----- • lwIP RAW Application • ------
lwIP Stack Init
Add network interface
DHCP Start

-------------------------------------
Board IP:       208.75.8.0
Netmask :       240.181.89.74
Gateway :       153.176.16.104
-------------------------------------

TCP Echo Init
Setup Done
UDP Bind Success
UDP Connect Success

Dabei sind die IP Adressen falsch, da irgendwas mit 10.19.11... kommen müsste!

Vielleicht weiß ja jemand woran es liegt und könnte mir helfen...
Gruß KK
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 10:28
Beitrag #2
RE: DHCP Problem lwIP
Moin KK,

DHCP Requests gehen über UDP Port 67 vom Client raus.
UDP muss also schon vor beginn des DHCP-Requests an die Karte gebunden sein.
Wenn ich deinen Code richtig überflogen habe bindest du aber UDP erst nach dem DHCP-Request auf die Karte?!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 11:16
Beitrag #3
RE: DHCP Problem lwIP
Hi,
vielleicht liegt's einfach daran, dass das Coding mit den 10.19.11er IP-Adressen gar nicht durchlaufen wird, sondern das Teil seine Adresse über DHCP bekommt. Mir sieht es so aus, als ob da ein externer DHCP-Server antwortet.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 11:36
Beitrag #4
RE: DHCP Problem lwIP
Erst einmal danke für die Antworten!

Zitat:DHCP Requests gehen über UDP Port 67 vom Client raus.
UDP muss also schon vor beginn des DHCP-Requests an die Karte gebunden sein.
Wenn ich deinen Code richtig überflogen habe bindest du aber UDP erst nach dem DHCP-Request auf die Karte?!
Das ist nicht schlimm. In der Funktion
Code:
dhcp_start(netif)
wird ein weiterer UDP Teil deklariert mit dem Port 67 also hat das danach nichts damit zu tun...

Zitat:vielleicht liegt's einfach daran, dass das Coding mit den 10.19.11er IP-Adressen gar nicht durchlaufen wird, sondern das Teil seine Adresse über DHCP bekommt. Mir sieht es so aus, als ob da ein externer DHCP-Server antwortet.
Wie meinst du das genau? Er soll ja auch seine IP Adresse über DHCP beziehen aber da müsste dann was mit 10.19.11... rauskommen. Die vordefinierte IP durchläuft er nur wenn ich in den Optionen DHCP auf 0 setze.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 11:46
Beitrag #5
RE: DHCP Problem lwIP
(03.03.2015 11:36)KK66 schrieb:  Wie meinst du das genau? Er soll ja auch seine IP Adresse über DHCP beziehen aber da müsste dann was mit 10.19.11... rauskommen.
Ich meine damit, dass die Adressen so aussehen, als ob die von Deinem Internet-Provider geliefert werden. D.h. das könnte jetzt die "externe" IP Deines Boards sein.
Das ist nur eine Vermutung. Kappe mal Deinen Internetzugang und schaue nach, was dann dabei rauskommt.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 11:59
Beitrag #6
RE: DHCP Problem lwIP
Ach so meinst du das... Smile
Ich habe die Verbindung mal gekappt, es kommt aber leider genau das selbe raus. Huh
Code:
----- • lwIP RAW Application • ------
lwIP Stack Init
Add network interface
DHCP Start

-------------------------------------
Board IP:       208.75.8.0
Netmask :       240.181.89.74
Gateway :       153.176.16.104
-------------------------------------

TCP Echo Init
Setup Done
UDP Bind Success
UDP Connect Success
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 12:02
Beitrag #7
RE: DHCP Problem lwIP
Tja, dann ist es das wohl nicht.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2015, 13:44
Beitrag #8
RE: DHCP Problem lwIP
Komisch ist ja auch, dass
Zitat:Board IP: 208.75.8.0
die Adresse eines Netzwerkes und nicht eines Host ist.
Der Adressbereich ist übrigens öffentlich vergeben an broadcore.com !
Zitat:Das ist nicht schlimm. In der Funktion
dhcp_start(netif)
wird ein weiterer UDP Teil deklariert mit dem Port 67 also hat das danach nichts damit zu tun...
Ergibt sich für mich die Frage wie viele Sockets die Karte gleichzeitig verarbeiten kann.
Weiterhin ergibt sich die Frage ob der DHCP-Request (sagen wir auf Socket 2) nicht eher vom UDP/67 Socket aus dhcp_start(netif) (Socket 1) beantwortet wird.
So läuft das zumindest sehr gerne auf dem Wiznet5100 Chip mit der Ethernet-Lib.
Macht man dort zwei Telnet-Sockets auf, kann man auf dem 1. Socket die Eingabe machen und bekommt auf dem 2. Socket das Echo zurück. Dies weil die Ethernet Lib nur auf die benutzten Ports achtet, nicht jedoch auf die Socketnummer.
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit SD Card Library BennIY 4 193 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 212 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 851 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 459 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 602 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.053 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 483 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 497 25.04.2016 21:52
Letzter Beitrag: rkuehle
  Problem mit OLED 0.96" Display torsten_156 3 544 03.04.2016 15:10
Letzter Beitrag: hotsystems
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 490 01.04.2016 05:49
Letzter Beitrag: MartinK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste