* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
-#define RCSID "$Id: ipcp.c,v 1.57 2001/03/08 05:11:12 paulus Exp $"
+#define RCSID "$Id: ipcp.c,v 1.59 2002/01/11 18:31:42 etbe Exp $"
/*
* TODO:
/* Hook for a plugin to choose the remote IP address */
void (*ip_choose_hook) __P((u_int32_t *)) = NULL;
+/* Notifiers for when IPCP goes up and down */
+struct notifier *ip_up_notifier = NULL;
+struct notifier *ip_down_notifier = NULL;
+
/* local vars */
static int default_route_set[NUM_PPP]; /* Have set up a default route */
static int proxy_arp_set[NUM_PPP]; /* Have created proxy arp entry */
static int setdnsaddr __P((char **));
static int setwinsaddr __P((char **));
static int setnetmask __P((char **));
-static int setipaddr __P((char *, char **, int));
+int setipaddr __P((char *, char **, int));
static void printipaddr __P((option_t *, void (*)(void *, char *,...),void *));
static option_t ipcp_option_list[] = {
* setipaddr - Set the IP address
* If doit is 0, the call is to check whether this option is
* potentially an IP address specification.
+ * Not static so that plugins can call it to set the addresses
*/
-static int
+int
setipaddr(arg, argv, doit)
char *arg;
char **argv;
np_up(f->unit, PPP_IP);
ipcp_is_up = 1;
+ notify(ip_up_notifier, 0);
if (ip_up_hook)
ip_up_hook();
/* XXX a bit IPv4-centric here, we only need to get the stats
* before the interface is marked down. */
update_link_stats(f->unit);
+ notify(ip_down_notifier, 0);
if (ip_down_hook)
ip_down_hook();
if (ipcp_is_up) {
*/
#define IP_HDRLEN 20 /* bytes */
#define IP_OFFMASK 0x1fff
+#ifndef IPPROTO_TCP
#define IPPROTO_TCP 6
+#endif
#define TCP_HDRLEN 20
#define TH_FIN 0x01