--- ppp/pppd/plugins/pppoatm.c~ 2003-07-19 15:35:24.000000000 +0200 +++ ppp/pppd/plugins/pppoatm.c 2003-07-19 15:42:26.000000000 +0200 @@ -32,6 +32,7 @@ static bool vc_encaps = 0; static int device_got_set = 0; static int pppoatm_max_mtu, pppoatm_max_mru; +static int pppoatmfd = -1; static int setdevname_pppoatm(const char *cp, const char **argv, int doit); struct channel pppoa_channel; @@ -173,9 +174,16 @@ pppoatm_max_mru = lcp_wantoptions[0].mru; set_line_discipline_pppoatm(fd); strlcpy(ppp_devnam, devnam, sizeof(ppp_devnam)); + pppoatmfd = fd; /* need to save it for disconnect */ return fd; } +static void disconnect_pppoatm(void) +{ + close(pppoatmfd); + pppoatmfd = -1; +} + static void send_config_pppoa(int mtu, u_int32_t asyncmap, int pcomp, @@ -222,7 +230,7 @@ process_extra_options: NULL, check_options: NULL, connect: &connect_pppoatm, - disconnect: NULL, + disconnect: &disconnect_pppoatm, establish_ppp: &generic_establish_ppp, disestablish_ppp: &generic_disestablish_ppp, send_config: &send_config_pppoa,