// L2TPNS PPP Stuff
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.53 2005-05-08 06:28:12 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.56 2005-05-10 09:47:23 bodea Exp $";
#include <stdio.h>
#include <string.h>
*q++ = 6;
memset(q, 0, 4); // asyncmap 0
q += 4;
- *((uint16_t *) (response + 2)) = htons(q - response); // LCP header length
break;
case 3: // Authentication-Protocol
q = a;
}
- *((uint16_t *) (response + 2)) = htons(q - response); // LCP header length
break;
}
break;
memcpy(q, o, length);
q += length;
- *((uint16_t *) (response + 2)) = htons(q - response); // LCP header length
}
x -= length;
o += length;
}
- if (!response)
+ if (response)
{
- // Send back a ConfigAck
- q = response = makeppp(b, sizeof(b), p, l, t, s, PPPLCP);
- if (!q) return;
- *q = ConfigAck;
+ l = q - response; // LCP packet length
+ *((uint16_t *) (response + 2)) = htons(l); // update header
+ }
+ else
+ {
+ // Send packet back as ConfigAck
+ response = makeppp(b, sizeof(b), p, l, t, s, PPPLCP);
+ if (!response) return;
+ *response = ConfigAck;
}
LOG(3, s, t, "Sending %s\n", ppp_lcp_type(*response));
- tunnelsend(b, l + (q - b), t);
+ tunnelsend(b, l + response - b, t);
if (!(session[s].flags & SF_LCP_ACKED))
sendlcp(t, s, config->radius_authprefer);
*l++ = ConfigReq;
*l++ = (time_now % 255) + 1; // ID
+ l += 2; //Save space for length
+
*l++ = 1; *l++ = 4; // Maximum-Receive-Unit (length 4)
*(uint16_t *) l = htons(session[s].mru); l += 2;