forked from M-Labs/artiq
PPP support (TCP broken)
This commit is contained in:
parent
063e88d75a
commit
dc709a77b8
|
@ -1,42 +0,0 @@
|
||||||
import logging
|
|
||||||
import serial
|
|
||||||
import struct
|
|
||||||
|
|
||||||
from artiq.coredevice.comm_generic import CommGeneric
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class Comm(CommGeneric):
|
|
||||||
def __init__(self, dmgr, serial_dev, baud_rate=115200):
|
|
||||||
super().__init__()
|
|
||||||
self.serial_dev = serial_dev
|
|
||||||
self.baud_rate = baud_rate
|
|
||||||
|
|
||||||
def open(self):
|
|
||||||
if hasattr(self, "port"):
|
|
||||||
return
|
|
||||||
self.port = serial.serial_for_url(self.serial_dev,
|
|
||||||
baudrate=self.baud_rate)
|
|
||||||
self.reset_session()
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
if not hasattr(self, "port"):
|
|
||||||
return
|
|
||||||
self.port.close()
|
|
||||||
del self.port
|
|
||||||
|
|
||||||
def read(self, length):
|
|
||||||
result = bytes()
|
|
||||||
while len(result) < length:
|
|
||||||
result += self.port.read(length - len(result))
|
|
||||||
return result
|
|
||||||
|
|
||||||
def write(self, data):
|
|
||||||
remaining = len(data)
|
|
||||||
pos = 0
|
|
||||||
while remaining:
|
|
||||||
written = self.port.write(data[pos:])
|
|
||||||
remaining -= written
|
|
||||||
pos += written
|
|
|
@ -32,8 +32,33 @@ CORE4FILES=core/ipv4/icmp.c \
|
||||||
# NETIFFILES: Files implementing various generic network interface functions.
|
# NETIFFILES: Files implementing various generic network interface functions.
|
||||||
NETIFFILES=netif/etharp.c
|
NETIFFILES=netif/etharp.c
|
||||||
|
|
||||||
|
PPPFILES=netif/ppp/auth.c \
|
||||||
|
netif/ppp/ccp.c \
|
||||||
|
netif/ppp/chap-md5.c \
|
||||||
|
netif/ppp/chap_ms.c \
|
||||||
|
netif/ppp/chap-new.c \
|
||||||
|
netif/ppp/demand.c \
|
||||||
|
netif/ppp/eap.c \
|
||||||
|
netif/ppp/ecp.c \
|
||||||
|
netif/ppp/eui64.c \
|
||||||
|
netif/ppp/fsm.c \
|
||||||
|
netif/ppp/ipcp.c \
|
||||||
|
netif/ppp/ipv6cp.c \
|
||||||
|
netif/ppp/lcp.c \
|
||||||
|
netif/ppp/magic.c \
|
||||||
|
netif/ppp/mppe.c \
|
||||||
|
netif/ppp/multilink.c \
|
||||||
|
netif/ppp/ppp.c \
|
||||||
|
netif/ppp/pppcrypt.c \
|
||||||
|
netif/ppp/pppoe.c \
|
||||||
|
netif/ppp/pppol2tp.c \
|
||||||
|
netif/ppp/pppos.c \
|
||||||
|
netif/ppp/upap.c \
|
||||||
|
netif/ppp/utils.c \
|
||||||
|
netif/ppp/vj.c
|
||||||
|
|
||||||
# LWIPFILES: All the above.
|
# LWIPFILES: All the above.
|
||||||
LWIPFILES=$(COREFILES) $(CORE4FILES) $(NETIFFILES)
|
LWIPFILES=$(COREFILES) $(CORE4FILES) $(NETIFFILES) $(PPPFILES)
|
||||||
|
|
||||||
LWIPOBJS:=$(LWIPFILES:.c=.o) liteethif.o
|
LWIPOBJS:=$(LWIPFILES:.c=.o) liteethif.o
|
||||||
|
|
||||||
|
@ -46,6 +71,7 @@ prepare:
|
||||||
ln -s $(LIBLWIP_DIRECTORY)/arch arch
|
ln -s $(LIBLWIP_DIRECTORY)/arch arch
|
||||||
mkdir -p core/ipv4
|
mkdir -p core/ipv4
|
||||||
mkdir -p netif
|
mkdir -p netif
|
||||||
|
mkdir -p netif/ppp
|
||||||
|
|
||||||
core/%.o: $(LWIPDIR)/core/%.c
|
core/%.o: $(LWIPDIR)/core/%.c
|
||||||
$(compile)
|
$(compile)
|
||||||
|
@ -56,6 +82,9 @@ core/ipv4/%.o: $(LWIPDIR)/core/ipv4/%.c
|
||||||
netif/%.o: $(LWIPDIR)/netif/%.c
|
netif/%.o: $(LWIPDIR)/netif/%.c
|
||||||
$(compile)
|
$(compile)
|
||||||
|
|
||||||
|
netif/ppp/%.o: $(LWIPDIR)/netif/ppp/%.c
|
||||||
|
$(compile)
|
||||||
|
|
||||||
%.o: $(LIBLWIP_DIRECTORY)/%.c
|
%.o: $(LIBLWIP_DIRECTORY)/%.c
|
||||||
$(compile)
|
$(compile)
|
||||||
|
|
||||||
|
|
|
@ -181,4 +181,10 @@ a lot of data that needs to be copied, this should be set high. */
|
||||||
#define SYS_STATS
|
#define SYS_STATS
|
||||||
#endif /* STATS */
|
#endif /* STATS */
|
||||||
|
|
||||||
|
/* ---------- PPP ---------- */
|
||||||
|
|
||||||
|
#define PPP_SUPPORT 1
|
||||||
|
#define PPPOS_SUPPORT 1
|
||||||
|
#define PPP_IPV4_SUPPORT 1
|
||||||
|
|
||||||
#endif /* __LWIPOPTS_H__ */
|
#endif /* __LWIPOPTS_H__ */
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include <generated/csr.h>
|
#include <generated/csr.h>
|
||||||
#include <hw/flags.h>
|
#include <hw/flags.h>
|
||||||
|
|
||||||
#ifdef CSR_ETHMAC_BASE
|
|
||||||
#include <lwip/init.h>
|
#include <lwip/init.h>
|
||||||
#include <lwip/memp.h>
|
#include <lwip/memp.h>
|
||||||
#include <lwip/ip4_addr.h>
|
#include <lwip/ip4_addr.h>
|
||||||
|
@ -17,8 +16,13 @@
|
||||||
#include <lwip/sys.h>
|
#include <lwip/sys.h>
|
||||||
#include <lwip/tcp.h>
|
#include <lwip/tcp.h>
|
||||||
#include <lwip/timers.h>
|
#include <lwip/timers.h>
|
||||||
|
#ifdef CSR_ETHMAC_BASE
|
||||||
#include <netif/etharp.h>
|
#include <netif/etharp.h>
|
||||||
#include <liteethif.h>
|
#include <liteethif.h>
|
||||||
|
#else
|
||||||
|
#include <netif/ppp/ppp.h>
|
||||||
|
#include <netif/ppp/pppos.h>
|
||||||
|
#include <lwip/sio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "bridge_ctl.h"
|
#include "bridge_ctl.h"
|
||||||
|
@ -32,24 +36,40 @@
|
||||||
#include "analyzer.h"
|
#include "analyzer.h"
|
||||||
#include "moninj.h"
|
#include "moninj.h"
|
||||||
|
|
||||||
#ifdef CSR_ETHMAC_BASE
|
|
||||||
|
|
||||||
u32_t sys_now(void)
|
u32_t sys_now(void)
|
||||||
{
|
{
|
||||||
return clock_get_ms();
|
return clock_get_ms();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32_t sys_jiffies(void)
|
||||||
|
{
|
||||||
|
return clock_get_ms();
|
||||||
|
}
|
||||||
|
|
||||||
static struct netif netif;
|
static struct netif netif;
|
||||||
|
|
||||||
|
#ifndef CSR_ETHMAC_BASE
|
||||||
|
static ppp_pcb *ppp;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void lwip_service(void)
|
static void lwip_service(void)
|
||||||
{
|
{
|
||||||
sys_check_timeouts();
|
sys_check_timeouts();
|
||||||
|
#ifdef CSR_ETHMAC_BASE
|
||||||
if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) {
|
if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) {
|
||||||
liteeth_input(&netif);
|
liteeth_input(&netif);
|
||||||
ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER);
|
ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if(uart_read_nonblock()) {
|
||||||
|
u8_t c;
|
||||||
|
c = uart_read();
|
||||||
|
pppos_input(ppp, &c, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CSR_ETHMAC_BASE
|
||||||
unsigned char macadr[6];
|
unsigned char macadr[6];
|
||||||
|
|
||||||
static int hex2nib(int c)
|
static int hex2nib(int c)
|
||||||
|
@ -128,6 +148,31 @@ static void network_init(void)
|
||||||
netif_set_up(&netif);
|
netif_set_up(&netif);
|
||||||
netif_set_link_up(&netif);
|
netif_set_link_up(&netif);
|
||||||
}
|
}
|
||||||
|
#else /* CSR_ETHMAC_BASE */
|
||||||
|
|
||||||
|
static void ppp_status_cb(ppp_pcb *pcb, int err_code, void *ctx)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
uart_write(data[i]);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void network_init(void)
|
||||||
|
{
|
||||||
|
ppp = pppos_create(&netif, NULL, ppp_status_cb, NULL);
|
||||||
|
ppp_set_auth(ppp, PPPAUTHTYPE_NONE, "", "");
|
||||||
|
ppp_set_default(ppp);
|
||||||
|
ppp_connect(ppp, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CSR_ETHMAC_BASE */
|
||||||
|
|
||||||
|
|
||||||
static struct net_server_instance session_inst = {
|
static struct net_server_instance session_inst = {
|
||||||
.port = 1381,
|
.port = 1381,
|
||||||
|
@ -153,7 +198,7 @@ static struct net_server_instance analyzer_inst = {
|
||||||
|
|
||||||
static void regular_main(void)
|
static void regular_main(void)
|
||||||
{
|
{
|
||||||
puts("Accepting sessions on Ethernet.");
|
puts("Accepting sessions on Network.");
|
||||||
network_init();
|
network_init();
|
||||||
net_server_init(&session_inst);
|
net_server_init(&session_inst);
|
||||||
#ifdef CSR_RTIO_ANALYZER_BASE
|
#ifdef CSR_RTIO_ANALYZER_BASE
|
||||||
|
@ -170,69 +215,6 @@ static void regular_main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* CSR_ETHMAC_BASE */
|
|
||||||
|
|
||||||
static void reset_serial_session(int signal)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
session_end();
|
|
||||||
if(signal) {
|
|
||||||
/* Signal end-of-session inband with zero length packet. */
|
|
||||||
for(i=0;i<4;i++)
|
|
||||||
uart_write(0x5a);
|
|
||||||
for(i=0;i<4;i++)
|
|
||||||
uart_write(0x00);
|
|
||||||
}
|
|
||||||
session_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void serial_service(void)
|
|
||||||
{
|
|
||||||
char *txdata;
|
|
||||||
int txlen;
|
|
||||||
static char rxdata;
|
|
||||||
static int rxpending;
|
|
||||||
int r, i;
|
|
||||||
|
|
||||||
if(!rxpending && uart_read_nonblock()) {
|
|
||||||
rxdata = uart_read();
|
|
||||||
rxpending = 1;
|
|
||||||
}
|
|
||||||
if(rxpending) {
|
|
||||||
r = session_input(&rxdata, 1);
|
|
||||||
if(r > 0)
|
|
||||||
rxpending = 0;
|
|
||||||
if(r < 0)
|
|
||||||
/* do not signal if reset was requested by host */
|
|
||||||
reset_serial_session(r != -2);
|
|
||||||
}
|
|
||||||
|
|
||||||
session_poll((void **)&txdata, &txlen);
|
|
||||||
if(txlen > 0) {
|
|
||||||
for(i = 0; i < txlen; i++)
|
|
||||||
uart_write(txdata[i]);
|
|
||||||
session_ack_consumed(txlen);
|
|
||||||
session_ack_sent(txlen);
|
|
||||||
} else if(txlen < 0) {
|
|
||||||
reset_serial_session(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void regular_main(void)
|
|
||||||
{
|
|
||||||
puts("Accepting sessions on serial link.");
|
|
||||||
|
|
||||||
/* Open the session for the serial control. */
|
|
||||||
session_start();
|
|
||||||
while(1) {
|
|
||||||
kloader_service_essential_kmsg();
|
|
||||||
serial_service();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void blink_led(void)
|
static void blink_led(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
#include <generated/csr.h>
|
#include <generated/csr.h>
|
||||||
|
|
||||||
#ifdef CSR_ETHMAC_BASE
|
|
||||||
|
|
||||||
#include <netif/etharp.h>
|
|
||||||
#include <lwip/init.h>
|
#include <lwip/init.h>
|
||||||
#include <lwip/memp.h>
|
#include <lwip/memp.h>
|
||||||
#include <lwip/ip4_addr.h>
|
#include <lwip/ip4_addr.h>
|
||||||
|
@ -152,5 +149,3 @@ void moninj_init(void)
|
||||||
udp_bind(listen_pcb, IP_ADDR_ANY, 3250);
|
udp_bind(listen_pcb, IP_ADDR_ANY, 3250);
|
||||||
udp_recv(listen_pcb, moninj_recv, NULL);
|
udp_recv(listen_pcb, moninj_recv, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CSR_ETHMAC_BASE */
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
#include <generated/csr.h>
|
#include <generated/csr.h>
|
||||||
|
|
||||||
#ifdef CSR_ETHMAC_BASE
|
|
||||||
|
|
||||||
#include <lwip/init.h>
|
#include <lwip/init.h>
|
||||||
#include <lwip/memp.h>
|
#include <lwip/memp.h>
|
||||||
#include <lwip/ip4_addr.h>
|
#include <lwip/ip4_addr.h>
|
||||||
|
@ -10,8 +8,6 @@
|
||||||
#include <lwip/sys.h>
|
#include <lwip/sys.h>
|
||||||
#include <lwip/tcp.h>
|
#include <lwip/tcp.h>
|
||||||
#include <lwip/timers.h>
|
#include <lwip/timers.h>
|
||||||
#include <netif/etharp.h>
|
|
||||||
#include <liteethif.h>
|
|
||||||
|
|
||||||
#include "net_server.h"
|
#include "net_server.h"
|
||||||
|
|
||||||
|
@ -227,5 +223,3 @@ void net_server_service(void)
|
||||||
pcb = pcb->next;
|
pcb = pcb->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CSR_ETHMAC_BASE */
|
|
||||||
|
|
Loading…
Reference in New Issue