Skip to content

Commit e3cd75f

Browse files
authored
lo port is added 127.0.0.1 when freebsd init.
Sometimes the application need 127.0.0.1 on lo0 after freebsd inited!
1 parent b9be57e commit e3cd75f

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

lib/ff_freebsd_init.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@
4747
#include "ff_api.h"
4848
#include "ff_config.h"
4949

50+
#include <sys/socketvar.h>
51+
#include <sys/sockio.h>
52+
#include <net/if.h>
53+
#include <net/if_var.h>
54+
#include <netinet/in_var.h>
55+
56+
int lo_set_defaultaddr(void);
57+
5058
int ff_freebsd_init(void);
5159

5260
extern void mutex_init(void);
@@ -64,6 +72,52 @@ extern cpuset_t all_cpus;
6472

6573
long physmem;
6674

75+
int lo_set_defaultaddr(void)
76+
{
77+
struct in_aliasreq req;
78+
char *addr="127.0.0.1";
79+
char *netmask="255.0.0.0";
80+
struct ifnet *ifp=NULL;
81+
int ret;
82+
83+
IFNET_WLOCK();
84+
TAILQ_FOREACH(ifp, &V_ifnet, if_link)
85+
if ( (ifp->if_flags & IFF_LOOPBACK) != 0 )
86+
break;
87+
IFNET_WUNLOCK();
88+
89+
if(ifp == NULL)
90+
return -1;
91+
92+
bzero(&req, sizeof req);
93+
strcpy(req.ifra_name, ifp->if_xname);
94+
95+
struct sockaddr_in sa;
96+
bzero(&sa, sizeof(sa));
97+
98+
sa.sin_len = sizeof(sa);
99+
sa.sin_family = AF_INET;
100+
101+
inet_pton(AF_INET, addr, &sa.sin_addr.s_addr);
102+
bcopy(&sa, &req.ifra_addr, sizeof(sa));
103+
104+
inet_pton(AF_INET, netmask, &sa.sin_addr.s_addr);
105+
bcopy(&sa, &req.ifra_mask, sizeof(sa));
106+
107+
//sa.sin_addr.s_addr = sc->broadcast;
108+
//bcopy(&sa, &req.ifra_broadaddr, sizeof(sa));
109+
110+
struct socket *so = NULL;
111+
ret = socreate(AF_INET, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread);
112+
if(ret != 0)
113+
return ret;
114+
115+
ret = ifioctl(so, SIOCAIFADDR, (caddr_t)&req, curthread);
116+
sofree(so);
117+
118+
return ret;
119+
}
120+
67121
int
68122
ff_freebsd_init(void)
69123
{
@@ -125,5 +179,9 @@ ff_freebsd_init(void)
125179
cur = cur->next;
126180
}
127181

182+
error = lo_set_defaultaddr();
183+
if(error != 0)
184+
printf("set loopback port default addr failed!");
185+
128186
return (0);
129187
}

0 commit comments

Comments
 (0)