FreeBSD Bugzilla – Attachment 251601 Details for
Bug 279881
socket support for IPv4-mapped IPv6 misbehave
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
test program
main.c (text/plain), 1.78 KB, created by
Andrey V. Elsukov
on 2024-06-21 12:36:09 UTC
(
hide
)
Description:
test program
Filename:
MIME Type:
Creator:
Andrey V. Elsukov
Created:
2024-06-21 12:36:09 UTC
Size:
1.78 KB
patch
obsolete
>#include <sys/types.h> >#include <sys/socket.h> >#include <sys/sysctl.h> >#include <sys/queue.h> >#include <arpa/inet.h> >#include <netinet/in.h> >#include <err.h> >#include <errno.h> >#include <stdio.h> >#include <string.h> >#include <sysexits.h> >#include <unistd.h> > >#define _debug(fmt, ...) \ > printf("%s:%u: " fmt, __func__, __LINE__, ## __VA_ARGS__) > > >static int >test(int opt, const char *ip4) >{ > char buf[INET6_ADDRSTRLEN]; > struct sockaddr_in6 sa; > socklen_t sz; > int s, ret, val; > > s = socket(AF_INET6, SOCK_DGRAM, 0); > if (s < 0 ) > err(EX_OSERR,"socket()"); > _debug("socket fd = %d\n", s); > > sz = sizeof(val); > ret = getsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &val, &sz); > if (ret < 0) > err(EX_OSERR,"getsockopt()"); > _debug("getsockopt(IPV6_V6ONLY) = %d\n", val); > > if (opt != val) { > ret = setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)); > if (ret < 0) > err(EX_OSERR,"setsockopt()"); > _debug("setsockopt(IPV6_V6ONLY) -> %d\n", opt); > } > > memset(&sa, 0, sizeof(sa)); > sa.sin6_family = AF_INET6; > sa.sin6_len = sizeof(sa); > sa.sin6_port = htons(53); > > snprintf(buf, sizeof(buf), "::ffff:%s", ip4); > ret = inet_pton(AF_INET6, buf, &sa.sin6_addr); > if (ret != 1) > err(EX_OSERR,"inet_pton(%s)", buf); > > ret = connect(s, (const struct sockaddr *)&sa, sizeof(sa)); > if (ret < 0) > _debug("connect(%s): %s\n", buf, strerror(errno)); > else > _debug("connect(%s) -> %d\n", buf, ret); > close(s); > _debug("----------\n"); > return (0); >} > >int >main(int argc, char *argv[]) >{ > const char *addr = "10.0.0.2"; > int i, ret; > size_t slen = sizeof(i); > > ret = sysctlbyname("net.inet6.ip6.v6only", &i, &slen, NULL, 0); > if (ret < 0) > err(EX_OSERR, "sysctlbyname(v6only)"); > _debug("sysctlbyname(net.inet6.ip6.v6only) = %d\n", i); > > if (argc == 2) > addr = argv[1]; > for (i = 0; i < 2; i++) > test(i, addr); > return (0); >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 279881
: 251601