On 2016-05-21 08:52, 梅凱 wrote:
This is my part c code:
11 int main()
12 {
13 in_addr_t addr_t=inet_addr("192.168.2.1");
14
15 struct in_addr in_addr=inet_makeaddr(addr_t,AF_INET);
16
17
18 struct jail j={
19 .version=JAIL_API_VERSION,
20 .path="./jail_test",
21 .hostname="myjail",
22 .ip4s=addr_t,
23 .ip6s=0,
24 .ip4=&in_addr,
25 .ip6=NULL
26 };
27
28 errno=0;
29 int rs=jail(&j);
30 if(0==rs){
31 printf("create jail ok!!!\r\n");
32 return 0;
33 }
34
35 switch(errno){
36 case EPERM:
37 printf("eperm\r\n");
38 break;
39 case EFAULT:
40 printf("efault\r\n");
41 break;
42 case EINVAL:
43 printf("einval\r\n");
44 break;
45 case EAGAIN:
46 printf("eagain\r\n");
47 break;
48 default:
49 printf("---------------\r\n");
50 break;
51 }
52 return 0;
53 }
Unfortunately,the errno return EINVAL,it means “The version number of
the argument is not correct.”,why?
Actually, jail(2) can give EINVAL not only for the reason listed, but
also for some of the reasons mentioned under jail_set. Really, it means
just some value was wrong.
In this case there were two errors. You passed addr_t in .ip4s, but
that's supposed to be the number of addresses and not the address itself
- pass 1 instead. Also, the path of "./jail_test" won't work; it needs
to be a full pathname instead. Fix those two and the jail will create
correctly.
- Jamie
_______________________________________________
freebsd-jail@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-jail
To unsubscribe, send any mail to "freebsd-jail-unsubscr...@freebsd.org"