[L2tpd-devel] 3COM HiperARC and l2tpd
Status: Inactive
Brought to you by:
dami0nd
|
From: Vanja H. <va...@va...> - 2001-12-03 18:37:59
|
Hi!
I've been having trouble establishing l2tp connection to 3COM HiperARC device, and last weekend I got some free time to play
with it. ISP is using 3COM HARC devices for 1-way cable modem users, and they only provide Windows client. Therefore, I
needed l2tpd.
First, I was not getting any responses from 3COM device after pppd was started. It turned out that, for some reason, 3COM
HARC doesn't like this (control.c):
add_rxspeed_avp(buf,DEFAULT_RX_BPS);
(sorry - no line numbers, I've ruined original control.c badly, and am too lazy to extract it and see which line this is :)
After I have commented this line out, I was able to properly authenticate myself, and get an IP address assigned by the ISP.
However, real trouble begins here.
ppp0 device comes up, IP address is properly assigned, but no packets will go through it. What happens is that if I (for
example) try to ping some IP on the Internet, absolutelly nothing happens. But, if I send *any* kind of packet to the 3COM
device itself, l2tpd goes into 'loop' mode, and starts sending enormous amounts of traffic over ppp0. The traffic actually
goes nowhere, since ppp0 doesn't seem to be 'connected' properly (not sure if this is the right word :). None of the lights
on the modem are lit at any moment, so all the traffic just gets lost. I am talking about 100Mbyte per minute amounts of
traffic.
I have found where the 'looping' occurs, but I have no clue *why* it occurs.
In network.c, function "network_thread":
--
while ((result=read_packet(buf,sc->fd,SYNC_FRAMING))>0) {
add_payload_hdr(sc->container, sc, buf);
if (packet_dump) {
do_packet_dump(buf);
}
sc->prx = sc->pSr;
if (sc->zlb_xmit) {
deschedule(sc->zlb_xmit);
sc->zlb_xmit=NULL;
}
sc->tx_bytes += buf->len;
sc->tx_pkts++;
udp_xmit(buf);
recycle_payload(buf, sc->container->peer);
}
--
Once a packet is sent to the 3COM device (a simple ping will do the trick), l2tpd gets stuck in this while loop, and never
gets out. What I would like to find out is what exactly this loop does, and what is the file descriptor which is being read?
result is always more than 0, but I am not sure what read_packet() is reading, and from where.
Any help is appreciated.
Regards,
Vanja
|