46void dhcp4o6_setup(u_int16_t port) {
47 struct sockaddr_in6 local6, remote6;
52 memset(&local6, 0,
sizeof(local6));
53 local6.sin6_family = AF_INET6;
55 local6.sin6_port = port;
57 local6.sin6_port = htons(ntohs(port) + 1);
58 local6.sin6_addr.s6_addr[15] = 1;
60 local6.sin6_len =
sizeof(local6);
62 memset(&remote6, 0,
sizeof(remote6));
63 remote6.sin6_family = AF_INET6;
65 remote6.sin6_port = htons(ntohs(port) + 1);
67 remote6.sin6_port = port;
68 remote6.sin6_addr.s6_addr[15] = 1;
70 remote6.sin6_len =
sizeof(remote6);
73 dhcp4o6_fd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
75 log_fatal(
"Can't create dhcp4o6 socket: %m");
77 if (setsockopt(dhcp4o6_fd, SOL_SOCKET, SO_REUSEADDR,
78 (
char *)&flag,
sizeof(flag)) < 0)
79 log_fatal(
"Can't set SO_REUSEADDR option "
80 "on dhcp4o6 socket: %m");
82 (
struct sockaddr *)&local6,
84 log_fatal(
"Can't bind dhcp4o6 socket: %m");
85 if (connect(dhcp4o6_fd,
86 (
struct sockaddr *)&remote6,
88 log_fatal(
"Can't connect dhcp4o6 socket: %m");
94 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
95 sizeof(*dhcp4o6_object),
98 log_fatal(
"Can't register dhcp4o6 type: %s",
99 isc_result_totext(status));
102 log_fatal(
"Can't allocate dhcp4o6 object: %s",
103 isc_result_totext(status));
105 dhcp4o6_readsocket, 0,
106 dhcpv4o6_handler, 0, 0);
108 log_fatal(
"Can't register dhcp4o6 handle: %s",
109 isc_result_totext(status));
struct __omapi_object_type_t omapi_object_type_t
isc_result_t omapi_register_io_object(omapi_object_t *, int(*)(omapi_object_t *), int(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *))
struct __omapi_object omapi_object_t
isc_result_t omapi_object_type_register(omapi_object_type_t **, const char *, isc_result_t(*)(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *), isc_result_t(*)(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **), isc_result_t(*)(omapi_object_t *, const char *, int), isc_result_t(*)(omapi_object_t *, const char *, va_list), isc_result_t(*)(omapi_object_t *, omapi_object_t *, omapi_object_t *), isc_result_t(*)(omapi_object_t **, omapi_object_t *, omapi_object_t *), isc_result_t(*)(omapi_object_t **, omapi_object_t *), isc_result_t(*)(omapi_object_t *, omapi_object_t *), isc_result_t(*)(omapi_object_t *, const char *, int), isc_result_t(*)(omapi_object_t **, const char *, int), isc_result_t(*)(size_t), size_t, isc_result_t(*)(omapi_object_t *, const char *, int), int)
isc_result_t omapi_object_allocate(omapi_object_t **, omapi_object_type_t *, size_t, const char *, int)
void log_fatal(const char *,...) __attribute__((__format__(__printf__