From 072d1038804b0314e576d451790752f9da460ac9 Mon Sep 17 00:00:00 2001 From: orange30 <44566632+orange30@users.noreply.github.com> Date: Thu, 9 Sep 2021 14:30:13 +0800 Subject: [PATCH] lo port is added 127.0.0.1 when freebsd init. Sometimes the application need 127.0.0.1 on lo0 after freebsd inited! --- lib/ff_freebsd_init.c | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/lib/ff_freebsd_init.c b/lib/ff_freebsd_init.c index eb2552652..28b9ec86b 100644 --- a/lib/ff_freebsd_init.c +++ b/lib/ff_freebsd_init.c @@ -47,6 +47,14 @@ #include "ff_api.h" #include "ff_config.h" +#include +#include +#include +#include +#include + +int lo_set_defaultaddr(void); + int ff_freebsd_init(void); extern void mutex_init(void); @@ -64,6 +72,52 @@ extern cpuset_t all_cpus; long physmem; +int lo_set_defaultaddr(void) +{ + struct in_aliasreq req; + char *addr="127.0.0.1"; + char *netmask="255.0.0.0"; + struct ifnet *ifp=NULL; + int ret; + + IFNET_WLOCK(); + TAILQ_FOREACH(ifp, &V_ifnet, if_link) + if ( (ifp->if_flags & IFF_LOOPBACK) != 0 ) + break; + IFNET_WUNLOCK(); + + if(ifp == NULL) + return -1; + + bzero(&req, sizeof req); + strcpy(req.ifra_name, ifp->if_xname); + + struct sockaddr_in sa; + bzero(&sa, sizeof(sa)); + + sa.sin_len = sizeof(sa); + sa.sin_family = AF_INET; + + inet_pton(AF_INET, addr, &sa.sin_addr.s_addr); + bcopy(&sa, &req.ifra_addr, sizeof(sa)); + + inet_pton(AF_INET, netmask, &sa.sin_addr.s_addr); + bcopy(&sa, &req.ifra_mask, sizeof(sa)); + + //sa.sin_addr.s_addr = sc->broadcast; + //bcopy(&sa, &req.ifra_broadaddr, sizeof(sa)); + + struct socket *so = NULL; + ret = socreate(AF_INET, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread); + if(ret != 0) + return ret; + + ret = ifioctl(so, SIOCAIFADDR, (caddr_t)&req, curthread); + sofree(so); + + return ret; +} + int ff_freebsd_init(void) { @@ -125,5 +179,9 @@ ff_freebsd_init(void) cur = cur->next; } + error = lo_set_defaultaddr(); + if(error != 0) + printf("set loopback port default addr failed!"); + return (0); }