Need help trying to to use the ntohl() call with in_addr

Max Laier max at
Fri Aug 14 07:44:46 UTC 2009

On Friday 14 August 2009 05:29:19 bert wiley wrote:
> Hi everyone
>   Im new to list and this question may be out of place. This is my first
> post. Im new to freebsd and trying to understand how to create a jail from
> some system calls. I followed the jail subsystem description from the
> handbook and im having a problem or may be using the call incorrectly. But
> here is what im trying to do.
> int main()
> {
>   struct in_addr ipaddr;
>   struct jail myjail;
>   char path[PATH_MAX];
>   realpath("/tmp", path);
>   myjail.version = 1;
>   myjail.path = path;
>   myjail.hostname = "testjail";
>   const char *ip;
>   ip = "";
>   inet_aton(ip, &ipaddr);
>   myjail.ip4 = ntohl(ipaddr.s_addr);   //  I get and error here, invalid
> conversion from   _uint32_t' to in_addr*
>   myjail.ip4 = ipaddr.s_addr;            // and and error here, invlid
> conversion from in_addr_t to in_addr*
> }
> I know that there is more that needs to be done but this just a test stub
> as im trying to work thru the calls and understand whats going on.
> Any would be appreciated thanks.

Take a look at the jail(2) man page:

     The ``ip4s'' and ``ip6s'' give the numbers of IPv4 and IPv6 addresses
     that will be passed via their respective pointers.

     The ``ip4'' and ``ip6'' pointers can be set to an arrays of IPv4 and IPv6
     addresses to be assigned to the prison, or NULL if none.  IPv4 addresses
     must be in network byte order.

So you'd do something like the following:

	myjail.ip4s = 1;
	inet_aton(ip, &ipaddr);
	myjail.ip4 = &ipaddr;

You don't have to switch byte order.

/"\  Best regards,                      | mlaier at
\ /  Max Laier                          | ICQ #67774661
 X  | mlaier at EFnet
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News

More information about the freebsd-hackers mailing list