Перейти к содержанию
    

LWIP. Установка TCP соединения в сервером

Добрый день.

 

Нужна помощь с библиотекой LWIP, неделю воюю с ней и никак не могу забороть.

 

Суть в следующем. Есть плата с GSM-модемом SARA G300. Сам модем умеет только данные передавать, при этом встроенного TCP стека у него нет.

Надо установить TCP соединение с сервером и отправить пакет с данными.

 

В итоге получилось настроить модем и установить PPP соединение (PPP Over Serial Line). Собственно ниже лог установки соединения.

[016.160] PPP-DEBUG: lcp_init: xmit_accm=0 0 0 0
[016.160] PPP-DEBUG: pppMain: unit 0: Connecting
[016.170] PPP-DEBUG: pppStartCB: unit 0
[016.180] PPP-DEBUG: ppp_set_xaccm[0]: outACCM=0 0 0 0
[016.190] PPP-DEBUG: ppp_send_config[0]: outACCM=FF FF FF FF
[016.200] PPP-DEBUG: ppp_recv_config[0]: inACCM=0 0 0 0
[016.210] PPP-DEBUG: lcp_lowerup: asyncmap=0 0 0 0
[016.220] PPP-DEBUG: LCP: lowerup state 0 (LS_INITIAL) -> 2 (LS_CLOSED)
[016.230] PPP-DEBUG: auth_reset: 0
[016.240] PPP-DEBUG: lcp_addci: L opt=2 0
[016.250] PPP-DEBUG: lcp_addci: L opt=5 24F8B455
[016.260] PPP-DEBUG: lcp_addci: opt=7
[016.270] PPP-DEBUG: lcp_addci: opt=8
[016.280] PPP-DEBUG: pppWrite[0]: len=45
[016.290] PPP-DEBUG: fsm_sdata(LCP): Sent code 1,1,20.
[016.300] PPP-DEBUG: LCP: sending Configure-Request, id 1
[016.310] PPP-DEBUG: LCP: open state 2 (LS_CLOSED) -> 6 (LS_REQSENT)
[017.190] PPP-DEBUG: pppInProc[0]: got 92 bytes
[017.190] PPP-DEBUG: pppInput[0]: LCP len=20
[017.200] PPP-DEBUG: fsm_input(LCP):1,1,20
[017.210] PPP-DEBUG: fsm_rconfreq(LCP): Rcvd id 1 state=6 (LS_REQSENT)
[017.220] PPP-DEBUG: lcp_reqci: rcvd ASYNCMAP=0 MAGICNUMBER (C5402872) PCOMPRES
[017.230] PPP-DEBUG: lcp_reqci: returning CONFACK.
[017.240] PPP-DEBUG: fsm_sdata(LCP): Sent code 2,1,20.
[017.250] PPP-DEBUG: pppInput[0]: LCP len=20
[017.260] PPP-DEBUG: fsm_input(LCP):2,1,20
[017.270] PPP-DEBUG: fsm_rconfack(LCP): Rcvd id 1 state=8 (LS_ACKSENT)
[017.280] PPP-DEBUG: lcp_acki: Ack
[017.290] PPP-DEBUG: ppp_send_config[0]: outACCM=0 0 0 0
[017.300] PPP-DEBUG: ppp_recv_config[0]: inACCM=0 0 0 0
[017.310] PPP-DEBUG: link_established: 0
[017.320] PPP-DEBUG: upap_lowerup: 0 s=0
[017.330] PPP-DEBUG: IPCP: lowerup state 0 (LS_INITIAL) -> 2 (LS_CLOSED)
[017.340] PPP-DEBUG: pppWrite[0]: len=30
[017.350] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,1,22.
[017.360] PPP-DEBUG: IPCP: sending Configure-Request, id 1
[017.370] PPP-DEBUG: IPCP: open state 2 (LS_CLOSED) -> 6 (LS_REQSENT)
[023.310] PPP-DEBUG: pppInProc[0]: got 46 bytes
[023.310] PPP-DEBUG: pppInput[0]: LCP len=20
[023.320] PPP-DEBUG: fsm_input(LCP):1,1,20
[023.330] PPP-DEBUG: fsm_rconfreq(LCP): Rcvd id 1 state=9 (LS_OPENED)
[023.340] PPP-DEBUG: link_down: 0
[023.350] PPP-DEBUG: upap_lowerdown: 0 s=1
[023.360] PPP-DEBUG: IPCP: lowerdown state 6 (LS_REQSENT) -> 1 (LS_STARTING)
[023.370] PPP-DEBUG: IPCP: close reason=LCP down state 1 (LS_STARTING) -> 0 (LS
[023.380] PPP-DEBUG: pppLinkDown: unit 0
[023.390] PPP-DEBUG: pppMainWakeup: unit 0
[023.400] PPP-DEBUG: ppp_send_config[0]: outACCM=FF FF FF FF
[023.410] PPP-DEBUG: ppp_recv_config[0]: inACCM=0 0 0 0
[023.420] PPP-DEBUG: auth_reset: 0
[023.430] PPP-DEBUG: lcp_addci: L opt=2 0
[023.440] PPP-DEBUG: lcp_addci: L opt=5 FB82D078
[023.450] PPP-DEBUG: lcp_addci: opt=7
[023.460] PPP-DEBUG: lcp_addci: opt=8
[023.470] PPP-DEBUG: pppWrite[0]: len=45
[023.480] PPP-DEBUG: fsm_sdata(LCP): Sent code 1,2,20.
[023.490] PPP-DEBUG: LCP: sending Configure-Request, id 2
[023.500] PPP-DEBUG: lcp_reqci: rcvd ASYNCMAP=0 MAGICNUMBER (C5402872) PCOMPRES
[023.510] PPP-DEBUG: lcp_reqci: returning CONFACK.
[023.520] PPP-DEBUG: pppWrite[0]: len=45
[023.530] PPP-DEBUG: fsm_sdata(LCP): Sent code 2,1,20.
[024.430] PPP-DEBUG: pppInProc[0]: got 45 bytes
[024.430] PPP-DEBUG: pppInput[0]: LCP len=20
[024.440] PPP-DEBUG: fsm_input(LCP):2,2,20
[024.450] PPP-DEBUG: fsm_rconfack(LCP): Rcvd id 2 state=8 (LS_ACKSENT)
[024.460] PPP-DEBUG: lcp_acki: Ack
[024.470] PPP-DEBUG: ppp_send_config[0]: outACCM=0 0 0 0
[024.480] PPP-DEBUG: ppp_recv_config[0]: inACCM=0 0 0 0
[024.490] PPP-DEBUG: link_established: 0
[024.500] PPP-DEBUG: upap_lowerup: 0 s=0
[024.510] PPP-DEBUG: IPCP: lowerup state 0 (LS_INITIAL) -> 2 (LS_CLOSED)
[024.520] PPP-DEBUG: pppWrite[0]: len=30
[024.530] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,2,22.
[024.540] PPP-DEBUG: IPCP: sending Configure-Request, id 2
[024.550] PPP-DEBUG: IPCP: open state 2 (LS_CLOSED) -> 6 (LS_REQSENT)
[025.450] PPP-DEBUG: pppInProc[0]: got 42 bytes
[025.450] PPP-DEBUG: pppInput[0]: IPCP len=10
[025.460] PPP-DEBUG: fsm_input(IPCP):1,1,10
[025.470] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=6 (LS_REQSENT)
[025.480] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[025.490] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[025.500] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[025.510] PPP-DEBUG: pppInput[0]: IPCP len=16
[025.520] PPP-DEBUG: fsm_input(IPCP):4,2,16
[025.530] PPP-DEBUG: fsm_rconfnakrej(IPCP): Rcvd id 2 state=8 (LS_ACKSENT)
[025.540] PPP-DEBUG: pppWrite[0]: len=18
[025.550] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,3,10.
[025.560] PPP-DEBUG: IPCP: sending Configure-Request, id 3
[026.470] PPP-DEBUG: pppInProc[0]: got 18 bytes
[026.470] PPP-DEBUG: pppInput[0]: IPCP len=10
[026.480] PPP-DEBUG: fsm_input(IPCP):3,3,10
[026.490] PPP-DEBUG: fsm_rconfnakrej(IPCP): Rcvd id 3 state=8 (LS_ACKSENT)
[026.500] PPP-DEBUG: local IP address 10.213.160.235
[026.510] PPP-DEBUG: pppWrite[0]: len=18
[026.520] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,4,10.
[026.530] PPP-DEBUG: IPCP: sending Configure-Request, id 4
[027.490] PPP-DEBUG: pppInProc[0]: got 18 bytes
[027.490] PPP-DEBUG: pppInput[0]: IPCP len=10
[027.500] PPP-DEBUG: fsm_input(IPCP):2,4,10
[027.510] PPP-DEBUG: fsm_rconfack(IPCP): Rcvd id 4 state=8 (LS_ACKSENT)
[027.520] PPP-DEBUG: np_up: 0 proto=21
[027.530] PPP-DEBUG: np_up: maxconnect=0 idle_time_limit=0
[027.540] PPP-DEBUG: ipcp: up
[027.550] PPP-DEBUG: sifup: unit 0: linkStatusCB=8037a89 errCode=0
[027.560] network: PPP connection was established
[027.570] network: ip_addr = 10.213.160.235
[027.580] network: netmask = 255.255.255.0
[027.590] network: dns1    = 0.0.0.0
[027.600] network: dns2    = 0.0.0.0

Судя по логу, вроде как PPP установлено.

Далее пытаюсь с помощью следующего кода установить TCP соединение с сервером (IP - в пример не настоящий):

void NetworkOpenTCP(void)
{
    struct ip_addr server_ip;
    IP4_ADDR(&server_ip, 13,14,15,16);
    tcpDesc = tcp_new();
    if (tcpDesc)
    {
        tcp_err(tcpDesc, TCPError);
        tcp_recv(tcpDesc, TCPReceive);

        if (tcp_connect(tcpDesc, &server_ip, 9100, TCPConnected) == ERR_OK)
        {
                DBG("Establishing TCP connection with server\n");
        }
    }
}

static err_t TCPConnected(void *arg, struct tcp_pcb *pcb, err_t err)
{
    LWIP_UNUSED_ARG(arg);
    if (err == ERR_OK)
    {
        DBG("TCP Socket was opened\n");
    }
    else
    {
        DBG("TCP Socket was not opened\n");
    }

    return err;
}

В итоге получаю следующий лог:

680] LWIP-DEBUG: tcp_connect to port 20485
[027.680] PPP-DEBUG: pppifOutput[0]: proto=0x0021
[027.690] network: Establishing TCP connection with server
[028.510] PPP-DEBUG: pppInProc[0]: got 162 bytes
[028.510] PPP-DEBUG: pppInput[0]: IPCP len=10
[028.520] PPP-DEBUG: fsm_input(IPCP):1,1,10
[028.530] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=9 (LS_OPENED)
[028.540] PPP-DEBUG: ipcp: down
[028.550] PPP-DEBUG: np_down: 0 proto=21
[028.560] PPP-DEBUG: sifdown: unit 0: linkStatusCB=8037a89 errCode=0
[028.570] network: PPP connection was lost
[028.580] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,5,22.
[028.590] PPP-DEBUG: IPCP: sending Configure-Request, id 5
[028.600] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[028.610] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[028.620] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[028.630] PPP-DEBUG: pppInput[0]: IPCP len=10
[028.640] PPP-DEBUG: fsm_input(IPCP):1,1,10
[028.650] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=8 (LS_ACKSENT)
[028.660] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[028.670] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[028.680] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[028.690] PPP-DEBUG: pppInput[0]: IPCP len=10
[028.700] PPP-DEBUG: fsm_input(IPCP):1,1,10
[028.710] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=8 (LS_ACKSENT)
[028.720] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[028.730] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[028.740] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[028.750] PPP-DEBUG: pppInput[0]: IPCP len=10
[028.760] PPP-DEBUG: fsm_input(IPCP):1,1,10
[028.770] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=8 (LS_ACKSENT)
[028.780] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[028.790] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[028.800] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[028.810] PPP-DEBUG: pppInput[0]: IPCP len=10
[028.820] PPP-DEBUG: fsm_input(IPCP):1,1,10
[028.830] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 1 state=8 (LS_ACKSENT)
[028.840] PPP-DEBUG: ipcp_reqci: ADDR 10.213.160.235
[028.850] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[028.860] PPP-DEBUG: pppWrite[0]: len=18
[028.870] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,1,10.
[029.870] PPP-DEBUG: pppInProc[0]: got 18 bytes
[029.870] PPP-DEBUG: pppInput[0]: IPCP len=10
[029.880] PPP-DEBUG: fsm_input(IPCP):2,1,10
[029.890] PPP-DEBUG: fsm_rconfack(IPCP): Rcvd id 1 state=8 (LS_ACKSENT)
[034.910] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[034.910] PPP-DEBUG: pppWrite[0]: len=30
[034.920] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,5,22.
[034.930] PPP-DEBUG: IPCP: sending Configure-Request, id 5
[034.970] PPP-DEBUG: pppInProc[0]: got 30 bytes
[034.970] PPP-DEBUG: pppInput[0]: IPCP len=22
[034.980] PPP-DEBUG: fsm_input(IPCP):1,5,22
[034.990] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 5 state=8 (LS_ACKSENT)
[b][b][035.000] PPP-DEBUG: ipcp_reqci: Reject ADDR 0.0.0.0
[035.010] PPP-DEBUG: ipcp_reqci: Rejecting DNS1 Request
[035.020] PPP-DEBUG: ipcp_reqci: Rejecting DNS2 Request
[035.030] PPP-DEBUG: ipcp_reqci: returning Configure-REJ
[035.040] PPP-DEBUG: pppWrite[0]: len=30
[/b][/b][035.050] PPP-DEBUG: fsm_sdata(IPCP): Sent code 4,5,22.
[035.990] PPP-DEBUG: pppInProc[0]: got 30 bytes
[035.990] PPP-DEBUG: pppInput[0]: IPCP len=22
[036.000] PPP-DEBUG: fsm_input(IPCP):4,5,22
[036.010] PPP-DEBUG: fsm_rconfnakrej(IPCP): Rcvd id 5 state=6 (LS_REQSENT)
[036.020] PPP-DEBUG: pppWrite[0]: len=22
[036.030] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,6,14.
[036.040] PPP-DEBUG: IPCP: sending Configure-Request, id 6
[037.010] PPP-DEBUG: pppInProc[0]: got 22 bytes
[037.010] PPP-DEBUG: pppInput[0]: IPCP len=14
[037.020] PPP-DEBUG: fsm_input(IPCP):1,6,14
[037.030] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 6 state=6 (LS_REQSENT)
[037.040] PPP-DEBUG: ipcp_reqci: Rejecting unknown CI type 1
[037.050] PPP-DEBUG: ipcp_reqci: returning Configure-REJ
[037.060] PPP-DEBUG: pppWrite[0]: len=22
[037.070] PPP-DEBUG: fsm_sdata(IPCP): Sent code 4,6,14.
[038.030] PPP-DEBUG: pppInProc[0]: got 22 bytes
[038.030] PPP-DEBUG: pppInput[0]: IPCP len=14
[038.040] PPP-DEBUG: fsm_input(IPCP):4,6,14
[038.050] PPP-DEBUG: fsm_rconfnakrej(IPCP): Rcvd id 6 state=6 (LS_REQSENT)
[038.060] PPP-DEBUG: pppWrite[0]: len=12
[038.070] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,7,4.
[038.080] PPP-DEBUG: IPCP: sending Configure-Request, id 7
[039.050] PPP-DEBUG: pppInProc[0]: got 12 bytes
[039.050] PPP-DEBUG: pppInput[0]: IPCP len=4
[039.060] PPP-DEBUG: fsm_input(IPCP):1,7,4
[039.070] PPP-DEBUG: fsm_rconfreq(IPCP): Rcvd id 7 state=6 (LS_REQSENT)
[039.080] PPP-DEBUG: ipcp_reqci: returning Configure-ACK
[039.090] PPP-DEBUG: pppWrite[0]: len=12
[039.100] PPP-DEBUG: fsm_sdata(IPCP): Sent code 2,7,4.
[044.150] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[044.150] PPP-DEBUG: pppWrite[0]: len=12
[044.160] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,7,4.
[044.170] PPP-DEBUG: IPCP: sending Configure-Request, id 7
[050.180] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[050.180] PPP-DEBUG: pppWrite[0]: len=12
[050.190] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,7,4.
[050.200] PPP-DEBUG: IPCP: sending Configure-Request, id 7
[056.210] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[056.210] PPP-DEBUG: pppWrite[0]: len=12
[056.220] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,7,4.
[056.230] PPP-DEBUG: IPCP: sending Configure-Request, id 7
[062.240] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[062.240] PPP-DEBUG: pppWrite[0]: len=12
....
[219.030] PPP-DEBUG: fsm_sdata(IPCP): Sent code 1,7,4.
[219.040] PPP-DEBUG: IPCP: sending Configure-Request, id 7
[225.050] PPP-DEBUG: IPCP: timeout resending Config-Request state=8 (LS_ACKSENT
[225.050] PPP-DEBUG: pppWrite[0]: len=12

дальше выделенная часть постоянно повторяется

В итоге соединение не устанавливается. В TCPConnected я не попадаю. Собственно нужна помощь, ну или хотя бы направление, куда/где смотреть.

Версия библиотеки LWIP 1.4.1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую netconn примерно так.

 

struct netconn * conn_Serv;
conn_Serv = netconn_new_with_callback(NETCONN_TCP, callback);
netconn_connect(conn_Serv, &ServerAddr, ServerPort);

Ждем пока не сработает колбек. В колбеке проверяем успешность подключения или ошибку.
Так же надо завести таймаут на connect. 

void callback(struct netconn *pconn, enum netconn_evt event, u16_t len)
{

    switch (event)
    {        
...
        case NETCONN_EVT_SENDPLUS:
        {    
            if (len == 0)
                TCPconnected = 1;
            break;
        }
        
...
    }

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую netconn примерно так...

Попробовал так, пока не завелось. Дополнительно получил в логе:

 

[041.480] PPP-DEBUG: Could not determine remote IP address
[041.490] PPP-DEBUG: ipcp: down
[041.500] PPP-DEBUG: np_down: 0 proto=21
[041.510] PPP-DEBUG: sifdown: unit 0: linkStatusCB=8037ba9 errCode=0
[041.520] network: PPP connection was lost
[041.530] PPP-DEBUG: pppWrite[0]: len=49
[041.540] PPP-DEBUG: fsm_sdata(IPCP): Sent code 5,8,41.
[041.550] PPP-DEBUG: IPCP: close reason=Could not determine remote IP address s
[041.860] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[042.360] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[042.440] PPP-DEBUG: pppInProc[0]: got 49 bytes
[042.440] PPP-DEBUG: pppInput[0]: IPCP len=41
[042.450] PPP-DEBUG: fsm_input(IPCP):5,8,41
[042.460] PPP-DEBUG: fsm_rtermreq(IPCP): Rcvd id 8 state=4 (LS_CLOSING)
[042.470] PPP-DEBUG: pppWrite[0]: len=12
[042.480] PPP-DEBUG: fsm_sdata(IPCP): Sent code 6,8,4.
[042.910] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[042.910] LWIP-DEBUG: tcp_slowtmr: polling application
[043.420] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[043.460] PPP-DEBUG: pppInProc[0]: got 12 bytes
[043.460] PPP-DEBUG: pppInput[0]: IPCP len=4
[043.470] PPP-DEBUG: fsm_input(IPCP):6,8,4
[043.480] PPP-DEBUG: fsm_rtermack(IPCP): state=4 (LS_CLOSING)
[043.490] PPP-DEBUG: np_finished: 0 proto=21
[043.500] PPP-DEBUG: link_down: 0
[043.510] PPP-DEBUG: upap_lowerdown: 0 s=1
[043.520] PPP-DEBUG: IPCP: lowerdown state 2 (LS_CLOSED) -> 0 (LS_INITIAL)
[043.530] PPP-DEBUG: IPCP: close reason=LCP down state 0 (LS_INITIAL) -> 0 (LS_
[043.540] PPP-DEBUG: pppLinkDown: unit 0
[043.550] PPP-DEBUG: pppMainWakeup: unit 0
[043.560] PPP-DEBUG: ppp_send_config[0]: outACCM=FF FF FF FF
[043.570] PPP-DEBUG: ppp_recv_config[0]: inACCM=0 0 0 0
[043.580] PPP-DEBUG: pppWrite[0]: len=44
[043.590] PPP-DEBUG: fsm_sdata(LCP): Sent code 5,3,32.
[043.600] PPP-DEBUG: LCP: close reason=No network protocols running state 9 (LS
[044.070] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[044.570] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[044.600] PPP-DEBUG: pppInProc[0]: got 44 bytes
[044.600] PPP-DEBUG: pppInput[0]: LCP len=32
[044.610] PPP-DEBUG: fsm_input(LCP):5,3,32
[044.620] PPP-DEBUG: fsm_rtermreq(LCP): Rcvd id 3 state=4 (LS_CLOSING)
[044.630] PPP-DEBUG: pppWrite[0]: len=17
[044.640] PPP-DEBUG: fsm_sdata(LCP): Sent code 6,3,4.
[045.120] LWIP-DEBUG: tcp_slowtmr: processing active pcb
[045.120] LWIP-DEBUG: tcp_slowtmr: polling application
[045.620] PPP-DEBUG: pppInProc[0]: got 17 bytes
[045.620] PPP-DEBUG: pppInput[0]: LCP len=4
[045.630] PPP-DEBUG: fsm_input(LCP):6,3,4
[045.640] PPP-DEBUG: fsm_rtermack(LCP): state=4 (LS_CLOSING)
[045.650] PPP-DEBUG: link_terminated: 0
[045.660] PPP-DEBUG: Connection terminated.
[045.670] PPP-DEBUG: pppLinkTerminated: unit 0
[045.680] PPP-DEBUG: pppMainWakeup: unit 0
[045.700] PPP-DEBUG: pppMain: unit 0: PHASE_DEAD
[045.700] PPP-DEBUG: pppMain: unit 0: linkStatusCB=8037ba9 errCode=0
[045.710] network: PPP connection was lost                             

Может у меня с настройками что-то не то в lwipopt. Сейчас этот файл у меня выглядит следующим образом:

#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

/**
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
* critical regions during buffer allocation, deallocation and memory
* allocation and deallocation.
*/

#define SYS_LIGHTWEIGHT_PROT     1

#define ETHARP_TRUST_IP_MAC      0
#define IP_REASSEMBLY            0
#define IP_FRAG                  0
#define ARP_QUEUEING             0

#define LWIP_TIMEVAL_PRIVATE     0

#define LWIP_NETIF_API           1

/**
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
* use lwIP facilities.
*/

#define NO_SYS                   0

/* ---------- Memory options ---------- */

/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
  lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
  byte alignment -> define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT            4

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE                 (4 * 1024)

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
  sends a lot of data out of ROM (or other static memory), this
  should be set high. */
#define MEMP_NUM_PBUF            2
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
  per active UDP "connection". */
#define MEMP_NUM_UDP_PCB         2
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
  connections. */
#define MEMP_NUM_TCP_PCB         2
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
  connections. */
#define MEMP_NUM_TCP_PCB_LISTEN  6
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
  segments. */
#define MEMP_NUM_TCP_SEG        10
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
  timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    7

/* ---------- Pbuf options ---------- */

/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE          2

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE       1500

/* ---------- Netbuf options ---------- */

/* MEMP_NUM_NETBUF: the number of struct netbufs.*/
#define MEMP_NUM_NETBUF         2

/* MEMP_NUM_NETCONN: the number of struct netconns.*/
#define MEMP_NUM_NETCONN        2

/* ---------- TCP options ---------- */

#define LWIP_TCP                1
#define TCP_TTL                 255

/* Controls if TCP should queue segments that arrive out of
  order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ         0

/* TCP Maximum segment size. */
#define TCP_MSS                 (1500 - 40)	  /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */

/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF             (2 * TCP_MSS)

/*  TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
 as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
#define TCP_SND_QUEUELEN        (4 * TCP_SND_BUF/TCP_MSS)

/* TCP receive window. */
#define TCP_WND                 (2 * TCP_MSS)


/* ---------- PPP options ---------- */

#define PPP_SUPPORT             1
#define PPPOS_SUPPORT           1
#define PPP_THREAD_STACKSIZE    1000
#define PPP_THREAD_PRIO         (configMAX_PRIORITIES - 2)

#define FSM_DEFMAXCONFREQS      1000

#define PAP_SUPPORT             1
#define CHAP_SUPPORT            1

/* ---------- DNS options ---------- */

#define LWIP_DNS                1

/* ---------- ICMP options ---------- */

#define LWIP_ICMP              1

/* ---------- UDP options ---------- */

#define LWIP_UDP                1
#define UDP_TTL                 255

/* ---------- Statistics options ---------- */

#define LWIP_STATS             0
#define LWIP_PROVIDE_ERRNO     1

/*
  --------------------------------------
  ---------- Checksum options ----------
  --------------------------------------
*/

/*
The STM32F2x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
- To use this feature let the following define uncommented.
- To disable it and process by CPU comment the  the checksum.
*/
#define CHECKSUM_BY_HARDWARE

#ifdef CHECKSUM_BY_HARDWARE
 /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
 #define CHECKSUM_GEN_IP                 0
 /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
 #define CHECKSUM_GEN_UDP                0
 /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
 #define CHECKSUM_GEN_TCP                0
 /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
 #define CHECKSUM_CHECK_IP               0
 /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
 #define CHECKSUM_CHECK_UDP              0
 /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
 #define CHECKSUM_CHECK_TCP              0
#else
 /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
 #define CHECKSUM_GEN_IP                 1
 /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
 #define CHECKSUM_GEN_UDP                1
 /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
 #define CHECKSUM_GEN_TCP                1
 /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
 #define CHECKSUM_CHECK_IP               1
 /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
 #define CHECKSUM_CHECK_UDP              1
 /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
 #define CHECKSUM_CHECK_TCP              1
#endif

/*
  ----------------------------------------------
  ---------- Sequential layer options ----------
  ----------------------------------------------
*/
/**
* LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
*/

#define LWIP_NETCONN        1

/*
  ------------------------------------
  ---------- Socket options ----------
  ------------------------------------
*/
/**
* LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
*/

#define LWIP_SOCKET         1

/*
  -----------------------------------
  ---------- DEBUG options ----------
  -----------------------------------
*/

#define LWIP_DEBUG          LWIP_DBG_ON
#define PPP_DEBUG           LWIP_DBG_ON
#define TCP_DEBUG           LWIP_DBG_ON

//#define PPP_DEBUG_RAW

/*
  ---------------------------------
  ---------- OS options ----------
  ---------------------------------
*/

#define TCPIP_THREAD_STACKSIZE          1000
#define TCPIP_MBOX_SIZE                 5
#define DEFAULT_UDP_RECVMBOX_SIZE       2000
#define DEFAULT_TCP_RECVMBOX_SIZE       2000
#define DEFAULT_ACCEPTMBOX_SIZE         2000
#define DEFAULT_THREAD_STACKSIZE        500
#define TCPIP_THREAD_PRIO               (configMAX_PRIORITIES - 2)

#endif /* __LWIPOPTS_H__ */

alex2103, а можете привести свои настройки lwip для сравнения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается PPP всегда падает после попытки TCP соединения?

Похоже на то. После попытки установить TCP соединения я почему-то в какой-то момент попадаю в callback на установку PPP, т.е. вот сюда:

...
pppDesc = pppOverSerialOpen(0, linkStatusCB, ctx);
...

static void linkStatusCB(void *ctx, int errCode, void *arg)
{
    struct ppp_addrs *addrs = arg;

    if (errCode == PPPERR_NONE)
    {
        DBG("PPP connection was established\n");
        DBG("ip_addr = %s\n",   ip_ntoa(&addrs->our_ipaddr) );
        DBG("netmask = %s\n",   ip_ntoa(&addrs->netmask)    );
        DBG("dns1    = %s\n",   ip_ntoa(&addrs->dns1)       );
        DBG("dns2    = %s\n\n", ip_ntoa(&addrs->dns2)       );

        isPPPConnected = 1;
    }
    else
    {
        // вот сюда попадаю в какой-то момент при попытке установить
        // TCP соединения

        DBG("PPP connection was lost\n");

        isPPPConnected = 0;
    }
}

Сейчас хочу посмотреть, какая именно ошибка (errCode) у меня появляется, а не просто отсутствие ошибки.

Изменено пользователем Grigorij

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После почти месяца изучения LWIP проблема нашлась. Все дело оказалось в 1) некорректной настройке самой библиотеке 2) некорректной передачи данных в TCPIP Thread.

В конечном итоге данные на сервер благополучно ушли. Попутно выяснилось, что версия 2.0 библиотеки несколько более дружелюбна с точки зрения поднятия PPP Over Serial Line и TCP поверх него (скорее всего субъективное мнение, но на этой версии оказалось все проще и понятнее).

 

Однако осталась одна проблема - не могу получить DNS от оператора. Всегда имею следующие результаты (за исключением IP адреса).

[017.190] network:    our_ipaddr  = 10.209.46.17
[017.200] network:    his_ipaddr  = 10.209.46.17
[017.210] network:    netmask     = 255.255.255.255
[017.220] network:    dns1        = 0.0.0.0
[017.230] network:    dns2        = 0.0.0.0

Хотя DNS и UPD разрешены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...