diff options
-rw-r--r-- | src/frontends/osx/charon-xpc/charon-xpc.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/frontends/osx/charon-xpc/charon-xpc.c b/src/frontends/osx/charon-xpc/charon-xpc.c index 2235be12d..057bfbd88 100644 --- a/src/frontends/osx/charon-xpc/charon-xpc.c +++ b/src/frontends/osx/charon-xpc/charon-xpc.c @@ -123,6 +123,29 @@ static void segv_handler(int signal) } /** + * PF_ROUTE for some reason does not send an event for the first address + * installed after a fresh boot. Fix this by installing a fake tun address + * just to remove it afterwards. + */ +static void fixup_pf_route() +{ + tun_device_t *tun; + host_t *host; + + tun = tun_device_create(NULL); + if (tun) + { + if (tun->up(tun)) + { + host = host_create_from_string("127.0.0.99", 0); + tun->set_address(tun, host, 32); + host->destroy(host); + } + tun->destroy(tun); + } +} + +/** * Main function, starts the daemon. */ int main(int argc, char *argv[]) @@ -204,5 +227,6 @@ int main(int argc, char *argv[]) atexit(dispatcher_cleanup); charon->start(charon); + fixup_pf_route(); return run(); } |