mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-12-07 04:05:46 +00:00
remove mdnstool now we are only using hostnet
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
@@ -39,8 +39,6 @@ COPY packages/proxy/proxy /sbin/
|
|||||||
COPY packages/proxy/etc /etc/
|
COPY packages/proxy/etc /etc/
|
||||||
COPY packages/transfused/transfused /sbin/
|
COPY packages/transfused/transfused /sbin/
|
||||||
COPY packages/transfused/etc /etc/
|
COPY packages/transfused/etc /etc/
|
||||||
COPY packages/mdnstool/mdnstool /sbin/
|
|
||||||
COPY packages/mdnstool/etc /etc/
|
|
||||||
COPY packages/llmnrd/llmnrd /sbin/
|
COPY packages/llmnrd/llmnrd /sbin/
|
||||||
COPY packages/llmnrd/etc /etc/
|
COPY packages/llmnrd/etc /etc/
|
||||||
COPY packages/llmnrd/llmnrd.tar.gz /usr/share/src/
|
COPY packages/llmnrd/llmnrd.tar.gz /usr/share/src/
|
||||||
@@ -98,7 +96,6 @@ RUN \
|
|||||||
rc-update add docker default && \
|
rc-update add docker default && \
|
||||||
rc-update add proxy default && \
|
rc-update add proxy default && \
|
||||||
rc-update add transfused default && \
|
rc-update add transfused default && \
|
||||||
rc-update add mdnstool default && \
|
|
||||||
rc-update add llmnrd default && \
|
rc-update add llmnrd default && \
|
||||||
rc-update add automount boot && \
|
rc-update add automount boot && \
|
||||||
rc-update add diagnostics default && \
|
rc-update add diagnostics default && \
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ all:
|
|||||||
$(MAKE) -C proxy OS=linux
|
$(MAKE) -C proxy OS=linux
|
||||||
$(MAKE) -C diagnostics OS=linux
|
$(MAKE) -C diagnostics OS=linux
|
||||||
$(MAKE) -C transfused OS=linux
|
$(MAKE) -C transfused OS=linux
|
||||||
$(MAKE) -C mdnstool OS=linux
|
|
||||||
$(MAKE) -C hupper OS=linux
|
$(MAKE) -C hupper OS=linux
|
||||||
$(MAKE) -C hvtools OS=linux
|
$(MAKE) -C hvtools OS=linux
|
||||||
$(MAKE) -C docker OS=Linux
|
$(MAKE) -C docker OS=Linux
|
||||||
@@ -13,7 +12,6 @@ all:
|
|||||||
|
|
||||||
arm:
|
arm:
|
||||||
$(MAKE) -C transfused OS=linux ARCH=arm
|
$(MAKE) -C transfused OS=linux ARCH=arm
|
||||||
$(MAKE) -C mdnstool OS=linux ARCH=arm
|
|
||||||
$(MAKE) -C hupper OS=linux ARCH=arm
|
$(MAKE) -C hupper OS=linux ARCH=arm
|
||||||
$(MAKE) -C docker arm OS=Linux ARCH=arm
|
$(MAKE) -C docker arm OS=Linux ARCH=arm
|
||||||
# Not cross building at present (C code)
|
# Not cross building at present (C code)
|
||||||
@@ -26,7 +24,6 @@ clean:
|
|||||||
$(MAKE) -C proxy clean
|
$(MAKE) -C proxy clean
|
||||||
$(MAKE) -C diagnostics clean
|
$(MAKE) -C diagnostics clean
|
||||||
$(MAKE) -C transfused clean
|
$(MAKE) -C transfused clean
|
||||||
$(MAKE) -C mdnstool clean
|
|
||||||
$(MAKE) -C docker clean
|
$(MAKE) -C docker clean
|
||||||
$(MAKE) -C hupper clean
|
$(MAKE) -C hupper clean
|
||||||
$(MAKE) -C hvtools clean
|
$(MAKE) -C hvtools clean
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ INET=$(ifconfig eth0 2> /dev/null | grep 'inet addr')
|
|||||||
[ $? -eq 0 ] && printf "✓ Network connected: $INET\n" || printf "✗ No network connection\n"
|
[ $? -eq 0 ] && printf "✓ Network connected: $INET\n" || printf "✗ No network connection\n"
|
||||||
FUSE=$(ps -eo args | grep '^/sbin/transfused')
|
FUSE=$(ps -eo args | grep '^/sbin/transfused')
|
||||||
[ $? -eq 0 ] && printf "✓ Process transfused running\n" || printf "✗ No transfused process\n"
|
[ $? -eq 0 ] && printf "✓ Process transfused running\n" || printf "✗ No transfused process\n"
|
||||||
MDNS=$(ps -eo args | grep '^/sbin/mdnstool')
|
|
||||||
[ $? -eq 0 ] && printf "✓ Process mdnstool running: $MDNS\n" || printf "✗ No mdnstool process\n"
|
|
||||||
HUPPER=$(ps -eo args | grep '^/bin/hupper')
|
HUPPER=$(ps -eo args | grep '^/bin/hupper')
|
||||||
[ $? -eq 0 ] && printf "✓ Process hupper running: $HUPPER\n" || printf "✗ No hupper process\n"
|
[ $? -eq 0 ] && printf "✓ Process hupper running: $HUPPER\n" || printf "✗ No hupper process\n"
|
||||||
DOCKER=$(ps -eo args | grep '^/usr/bin/docker')
|
DOCKER=$(ps -eo args | grep '^/usr/bin/docker')
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after docker mdnstool hupper
|
after docker hupper
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
1
alpine/packages/mdnstool/.gitignore
vendored
1
alpine/packages/mdnstool/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
mdnstool
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
FROM golang:alpine
|
|
||||||
|
|
||||||
RUN mkdir -p /go/src/mdnstool
|
|
||||||
WORKDIR /go/src/mdnstool
|
|
||||||
|
|
||||||
ARG GOARCH
|
|
||||||
ARG GOOS
|
|
||||||
|
|
||||||
COPY . /go/src/mdnstool/
|
|
||||||
|
|
||||||
RUN go install
|
|
||||||
|
|
||||||
RUN [ -f /go/bin/*/mdnstool ] && mv /go/bin/*/mdnstool /go/bin/ || true
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
all: mdnstool
|
|
||||||
|
|
||||||
mdnstool: Dockerfile mdnstool.go mdnsmon/mdnsmon.go
|
|
||||||
docker build --build-arg GOOS=$(OS) --build-arg GOARCH=$(ARCH) -t mdnstool:build .
|
|
||||||
docker run --rm mdnstool:build cat /go/bin/mdnstool > mdnstool
|
|
||||||
chmod 755 mdnstool
|
|
||||||
|
|
||||||
vendor:
|
|
||||||
docker run -v $(PWD):/go/src -it justincormack/gvt fetch github.com/hashicorp/mdns
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f mdnstool
|
|
||||||
docker images -q mdnstool:build | xargs docker rmi -f
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
Tool to monitor a network interface for IP changes and publish an mDNS service.
|
|
||||||
|
|
||||||
To publish `docker.local` and map it to the IP of interface `eth0`:
|
|
||||||
|
|
||||||
```
|
|
||||||
./mdnstool -if eth0
|
|
||||||
```
|
|
||||||
|
|
||||||
Options:
|
|
||||||
|
|
||||||
```
|
|
||||||
Usage of ./mdnstool:
|
|
||||||
-hostname string
|
|
||||||
Hostname - must be FQDN and end with . (default "docker.local.")
|
|
||||||
-if string
|
|
||||||
Network interface to bind multicast listener to. This interface will be monitored for IP changes. (default "eth0")
|
|
||||||
-info string
|
|
||||||
TXT service description (default "Moby")
|
|
||||||
-instance string
|
|
||||||
Instance description (default "Moby")
|
|
||||||
-port int
|
|
||||||
Service port (default 22)
|
|
||||||
-service string
|
|
||||||
SRV service type (default "_ssh._tcp")
|
|
||||||
```
|
|
||||||
|
|
||||||
To build for Linux:
|
|
||||||
|
|
||||||
```
|
|
||||||
GOOS=linux GOARCH=386 go build -v
|
|
||||||
```
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/sbin/openrc-run
|
|
||||||
|
|
||||||
description="mDNS server"
|
|
||||||
|
|
||||||
depend()
|
|
||||||
{
|
|
||||||
need net
|
|
||||||
after firewall
|
|
||||||
}
|
|
||||||
|
|
||||||
start()
|
|
||||||
{
|
|
||||||
ebegin "Starting mDNS server"
|
|
||||||
|
|
||||||
PIDFILE=/var/run/mdnstool.pid
|
|
||||||
|
|
||||||
hostname -F /etc/hostname
|
|
||||||
export HOSTNAME=$(hostname -s).local.
|
|
||||||
|
|
||||||
start-stop-daemon --start --quiet \
|
|
||||||
--background \
|
|
||||||
--exec /sbin/mdnstool \
|
|
||||||
--make-pidfile --pidfile ${PIDFILE} \
|
|
||||||
-- -if eth0 -hostname ${HOSTNAME}
|
|
||||||
|
|
||||||
eend $? "Failed to start mDNS server"
|
|
||||||
}
|
|
||||||
|
|
||||||
stop()
|
|
||||||
{
|
|
||||||
ebegin "Stopping mDNS server"
|
|
||||||
|
|
||||||
PIDFILE=/var/run/mdnstool.pid
|
|
||||||
|
|
||||||
start-stop-daemon --stop --quiet --pidfile ${PIDFILE}
|
|
||||||
|
|
||||||
eend $? "Failed to stop mDNS server"
|
|
||||||
}
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
package mdnsmon
|
|
||||||
|
|
||||||
// mDNS server that publishes a service with the IP address(es) of a monitored network interface.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
"net"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/mdns"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MDNSServer struct {
|
|
||||||
service *mdns.MDNSService
|
|
||||||
iface *net.Interface
|
|
||||||
ip_updates chan []net.IP
|
|
||||||
shutdown chan int
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewServer creates a new mDNS service and server configuration.
|
|
||||||
func NewServer(hostname string, instance string, port int, srv string, info []string, iface *net.Interface) (*MDNSServer, error) {
|
|
||||||
service, err := mdns.NewMDNSService(instance, srv, "local.", hostname, port, []net.IP{net.ParseIP("0.0.0.0")}, info)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ip_updates := make(chan []net.IP)
|
|
||||||
shutdown := make(chan int)
|
|
||||||
|
|
||||||
return &MDNSServer{service: service, ip_updates: ip_updates, shutdown: shutdown, iface: iface}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// getIPs gets a list of IP addresses from an interface
|
|
||||||
func getIPs(iface *net.Interface) []net.IP {
|
|
||||||
addrs, err := iface.Addrs()
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Unable to read interface address(es), error: %s", err)
|
|
||||||
return []net.IP{}
|
|
||||||
}
|
|
||||||
|
|
||||||
var ips []net.IP
|
|
||||||
for _, a := range addrs {
|
|
||||||
switch v := a.(type) {
|
|
||||||
case *net.IPNet:
|
|
||||||
if v.IP.To4() != nil { // Only support IPv4 for now
|
|
||||||
ips = append(ips, v.IP)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ips
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MDNSServer) runServer() {
|
|
||||||
var server *mdns.Server
|
|
||||||
var err error
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if server != nil {
|
|
||||||
log.Println("Shutting down mDNS server...")
|
|
||||||
server.Shutdown()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case ips := <-m.ip_updates: // New IP set received, registering service
|
|
||||||
// Update service/zone record
|
|
||||||
m.service.IPs = ips
|
|
||||||
|
|
||||||
// Shutdown old mDNS server, if running
|
|
||||||
if server != nil {
|
|
||||||
log.Println("New configuration - shutting down mDNS server...")
|
|
||||||
server.Shutdown()
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
server = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip if no IPs found
|
|
||||||
if len(ips) == 0 {
|
|
||||||
log.Println("No IP address. Waiting for IP to be configured.")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the mDNS server
|
|
||||||
log.Println("Answering requests for IP(s) ", ips)
|
|
||||||
server, err = mdns.NewServer(&mdns.Config{Zone: m.service, Iface: m.iface})
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
m.service.IPs = []net.IP{} // Reset IP set so we can automatically retry later
|
|
||||||
}
|
|
||||||
case <-m.shutdown:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// isIPsequal compares to slices with IPs
|
|
||||||
func isIPsequal(a []net.IP, b []net.IP) bool {
|
|
||||||
if a == nil && b == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if a == nil && b != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if a != nil && b == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if len(a) != len(b) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for _, ip1 := range a {
|
|
||||||
match := false
|
|
||||||
for _, ip2 := range b {
|
|
||||||
if ip1.Equal(ip2) {
|
|
||||||
match = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if match == false { // if one ip from a is not in b, return false
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start starts the background mDNS server and starts monitoring the network interface for IP changes.
|
|
||||||
func (m *MDNSServer) Start() {
|
|
||||||
// Start background server
|
|
||||||
go m.runServer()
|
|
||||||
|
|
||||||
// Monitor interface for IP changes
|
|
||||||
for {
|
|
||||||
ips := getIPs(m.iface)
|
|
||||||
if !isIPsequal(ips, m.service.IPs) {
|
|
||||||
log.Println("IP configuration:", ips)
|
|
||||||
m.ip_updates <- ips
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO(magnuss) Monitor using netlink?
|
|
||||||
if len(ips) == 0 { // Sleep shorter if no IP found
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
} else {
|
|
||||||
time.Sleep(60 * time.Second) // Takes longer to react on IP change, but mDNS has TTL of 120 sec
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shutdown stops the background mDNS server and stops monitorint the network interface for IP changes.
|
|
||||||
func (m *MDNSServer) Shutdown() {
|
|
||||||
m.shutdown <- 0 // TODO(magnuss) Wait for mDNS to shutdown
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
// CLI tool for mDNSmon. Monitors a network interface for IP changes and re-publishes the mDNS service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"log"
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"mdnstool/mdnsmon"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
hostname := flag.String("hostname", "docker.local.", "Hostname - must be FQDN and end with .")
|
|
||||||
instance := flag.String("instance", "Moby", "Instance description")
|
|
||||||
port := flag.Int("port", 22, "Service port")
|
|
||||||
srv := flag.String("service", "_ssh._tcp", "SRV service type")
|
|
||||||
info := flag.String("info", "Moby", "TXT service description")
|
|
||||||
iface_name := flag.String("if", "eth0", "Network interface to bind multicast listener to. This interface will be monitored for IP changes.")
|
|
||||||
detach := flag.Bool("detach", false, "Detach from terminal")
|
|
||||||
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
// Deatch from terminal (based on code from 9pudc)
|
|
||||||
if *detach {
|
|
||||||
logFile, err := os.Create("/var/log/mdnstool.log")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln("Failed to open log file", err)
|
|
||||||
}
|
|
||||||
log.SetOutput(logFile)
|
|
||||||
null, err := os.OpenFile("/dev/null", os.O_RDWR, 0)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln("Failed to open /dev/null", err)
|
|
||||||
}
|
|
||||||
fd := null.Fd()
|
|
||||||
syscall.Dup2(int(fd), int(os.Stdin.Fd()))
|
|
||||||
syscall.Dup2(int(fd), int(os.Stdout.Fd()))
|
|
||||||
syscall.Dup2(int(fd), int(os.Stderr.Fd()))
|
|
||||||
}
|
|
||||||
|
|
||||||
iface, err := net.InterfaceByName(*iface_name)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
s, err := mdnsmon.NewServer(*hostname, *instance, *port, *srv, []string{*info}, iface)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
go s.Start()
|
|
||||||
defer s.Shutdown()
|
|
||||||
select {}
|
|
||||||
}
|
|
||||||
184
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/internal/iana/const.go
generated
vendored
184
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/internal/iana/const.go
generated
vendored
@@ -1,184 +0,0 @@
|
|||||||
// go generate gen.go
|
|
||||||
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
|
||||||
|
|
||||||
// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).
|
|
||||||
package iana
|
|
||||||
|
|
||||||
// Differentiated Services Field Codepoints (DSCP), Updated: 2013-06-25
|
|
||||||
const (
|
|
||||||
DiffServCS0 = 0x0 // CS0
|
|
||||||
DiffServCS1 = 0x20 // CS1
|
|
||||||
DiffServCS2 = 0x40 // CS2
|
|
||||||
DiffServCS3 = 0x60 // CS3
|
|
||||||
DiffServCS4 = 0x80 // CS4
|
|
||||||
DiffServCS5 = 0xa0 // CS5
|
|
||||||
DiffServCS6 = 0xc0 // CS6
|
|
||||||
DiffServCS7 = 0xe0 // CS7
|
|
||||||
DiffServAF11 = 0x28 // AF11
|
|
||||||
DiffServAF12 = 0x30 // AF12
|
|
||||||
DiffServAF13 = 0x38 // AF13
|
|
||||||
DiffServAF21 = 0x48 // AF21
|
|
||||||
DiffServAF22 = 0x50 // AF22
|
|
||||||
DiffServAF23 = 0x58 // AF23
|
|
||||||
DiffServAF31 = 0x68 // AF31
|
|
||||||
DiffServAF32 = 0x70 // AF32
|
|
||||||
DiffServAF33 = 0x78 // AF33
|
|
||||||
DiffServAF41 = 0x88 // AF41
|
|
||||||
DiffServAF42 = 0x90 // AF42
|
|
||||||
DiffServAF43 = 0x98 // AF43
|
|
||||||
DiffServEFPHB = 0xb8 // EF PHB
|
|
||||||
DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT
|
|
||||||
)
|
|
||||||
|
|
||||||
// IPv4 TOS Byte and IPv6 Traffic Class Octet, Updated: 2001-09-06
|
|
||||||
const (
|
|
||||||
NotECNTransport = 0x0 // Not-ECT (Not ECN-Capable Transport)
|
|
||||||
ECNTransport1 = 0x1 // ECT(1) (ECN-Capable Transport(1))
|
|
||||||
ECNTransport0 = 0x2 // ECT(0) (ECN-Capable Transport(0))
|
|
||||||
CongestionExperienced = 0x3 // CE (Congestion Experienced)
|
|
||||||
)
|
|
||||||
|
|
||||||
// Protocol Numbers, Updated: 2014-08-12
|
|
||||||
const (
|
|
||||||
ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number
|
|
||||||
ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
|
|
||||||
ProtocolICMP = 1 // Internet Control Message
|
|
||||||
ProtocolIGMP = 2 // Internet Group Management
|
|
||||||
ProtocolGGP = 3 // Gateway-to-Gateway
|
|
||||||
ProtocolIPv4 = 4 // IPv4 encapsulation
|
|
||||||
ProtocolST = 5 // Stream
|
|
||||||
ProtocolTCP = 6 // Transmission Control
|
|
||||||
ProtocolCBT = 7 // CBT
|
|
||||||
ProtocolEGP = 8 // Exterior Gateway Protocol
|
|
||||||
ProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP)
|
|
||||||
ProtocolBBNRCCMON = 10 // BBN RCC Monitoring
|
|
||||||
ProtocolNVPII = 11 // Network Voice Protocol
|
|
||||||
ProtocolPUP = 12 // PUP
|
|
||||||
ProtocolARGUS = 13 // ARGUS
|
|
||||||
ProtocolEMCON = 14 // EMCON
|
|
||||||
ProtocolXNET = 15 // Cross Net Debugger
|
|
||||||
ProtocolCHAOS = 16 // Chaos
|
|
||||||
ProtocolUDP = 17 // User Datagram
|
|
||||||
ProtocolMUX = 18 // Multiplexing
|
|
||||||
ProtocolDCNMEAS = 19 // DCN Measurement Subsystems
|
|
||||||
ProtocolHMP = 20 // Host Monitoring
|
|
||||||
ProtocolPRM = 21 // Packet Radio Measurement
|
|
||||||
ProtocolXNSIDP = 22 // XEROX NS IDP
|
|
||||||
ProtocolTRUNK1 = 23 // Trunk-1
|
|
||||||
ProtocolTRUNK2 = 24 // Trunk-2
|
|
||||||
ProtocolLEAF1 = 25 // Leaf-1
|
|
||||||
ProtocolLEAF2 = 26 // Leaf-2
|
|
||||||
ProtocolRDP = 27 // Reliable Data Protocol
|
|
||||||
ProtocolIRTP = 28 // Internet Reliable Transaction
|
|
||||||
ProtocolISOTP4 = 29 // ISO Transport Protocol Class 4
|
|
||||||
ProtocolNETBLT = 30 // Bulk Data Transfer Protocol
|
|
||||||
ProtocolMFENSP = 31 // MFE Network Services Protocol
|
|
||||||
ProtocolMERITINP = 32 // MERIT Internodal Protocol
|
|
||||||
ProtocolDCCP = 33 // Datagram Congestion Control Protocol
|
|
||||||
Protocol3PC = 34 // Third Party Connect Protocol
|
|
||||||
ProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol
|
|
||||||
ProtocolXTP = 36 // XTP
|
|
||||||
ProtocolDDP = 37 // Datagram Delivery Protocol
|
|
||||||
ProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto
|
|
||||||
ProtocolTPPP = 39 // TP++ Transport Protocol
|
|
||||||
ProtocolIL = 40 // IL Transport Protocol
|
|
||||||
ProtocolIPv6 = 41 // IPv6 encapsulation
|
|
||||||
ProtocolSDRP = 42 // Source Demand Routing Protocol
|
|
||||||
ProtocolIPv6Route = 43 // Routing Header for IPv6
|
|
||||||
ProtocolIPv6Frag = 44 // Fragment Header for IPv6
|
|
||||||
ProtocolIDRP = 45 // Inter-Domain Routing Protocol
|
|
||||||
ProtocolRSVP = 46 // Reservation Protocol
|
|
||||||
ProtocolGRE = 47 // Generic Routing Encapsulation
|
|
||||||
ProtocolDSR = 48 // Dynamic Source Routing Protocol
|
|
||||||
ProtocolBNA = 49 // BNA
|
|
||||||
ProtocolESP = 50 // Encap Security Payload
|
|
||||||
ProtocolAH = 51 // Authentication Header
|
|
||||||
ProtocolINLSP = 52 // Integrated Net Layer Security TUBA
|
|
||||||
ProtocolSWIPE = 53 // IP with Encryption
|
|
||||||
ProtocolNARP = 54 // NBMA Address Resolution Protocol
|
|
||||||
ProtocolMOBILE = 55 // IP Mobility
|
|
||||||
ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
|
|
||||||
ProtocolSKIP = 57 // SKIP
|
|
||||||
ProtocolIPv6ICMP = 58 // ICMP for IPv6
|
|
||||||
ProtocolIPv6NoNxt = 59 // No Next Header for IPv6
|
|
||||||
ProtocolIPv6Opts = 60 // Destination Options for IPv6
|
|
||||||
ProtocolCFTP = 62 // CFTP
|
|
||||||
ProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK
|
|
||||||
ProtocolKRYPTOLAN = 65 // Kryptolan
|
|
||||||
ProtocolRVD = 66 // MIT Remote Virtual Disk Protocol
|
|
||||||
ProtocolIPPC = 67 // Internet Pluribus Packet Core
|
|
||||||
ProtocolSATMON = 69 // SATNET Monitoring
|
|
||||||
ProtocolVISA = 70 // VISA Protocol
|
|
||||||
ProtocolIPCV = 71 // Internet Packet Core Utility
|
|
||||||
ProtocolCPNX = 72 // Computer Protocol Network Executive
|
|
||||||
ProtocolCPHB = 73 // Computer Protocol Heart Beat
|
|
||||||
ProtocolWSN = 74 // Wang Span Network
|
|
||||||
ProtocolPVP = 75 // Packet Video Protocol
|
|
||||||
ProtocolBRSATMON = 76 // Backroom SATNET Monitoring
|
|
||||||
ProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary
|
|
||||||
ProtocolWBMON = 78 // WIDEBAND Monitoring
|
|
||||||
ProtocolWBEXPAK = 79 // WIDEBAND EXPAK
|
|
||||||
ProtocolISOIP = 80 // ISO Internet Protocol
|
|
||||||
ProtocolVMTP = 81 // VMTP
|
|
||||||
ProtocolSECUREVMTP = 82 // SECURE-VMTP
|
|
||||||
ProtocolVINES = 83 // VINES
|
|
||||||
ProtocolTTP = 84 // Transaction Transport Protocol
|
|
||||||
ProtocolIPTM = 84 // Internet Protocol Traffic Manager
|
|
||||||
ProtocolNSFNETIGP = 85 // NSFNET-IGP
|
|
||||||
ProtocolDGP = 86 // Dissimilar Gateway Protocol
|
|
||||||
ProtocolTCF = 87 // TCF
|
|
||||||
ProtocolEIGRP = 88 // EIGRP
|
|
||||||
ProtocolOSPFIGP = 89 // OSPFIGP
|
|
||||||
ProtocolSpriteRPC = 90 // Sprite RPC Protocol
|
|
||||||
ProtocolLARP = 91 // Locus Address Resolution Protocol
|
|
||||||
ProtocolMTP = 92 // Multicast Transport Protocol
|
|
||||||
ProtocolAX25 = 93 // AX.25 Frames
|
|
||||||
ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
|
|
||||||
ProtocolMICP = 95 // Mobile Internetworking Control Pro.
|
|
||||||
ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
|
|
||||||
ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
|
|
||||||
ProtocolENCAP = 98 // Encapsulation Header
|
|
||||||
ProtocolGMTP = 100 // GMTP
|
|
||||||
ProtocolIFMP = 101 // Ipsilon Flow Management Protocol
|
|
||||||
ProtocolPNNI = 102 // PNNI over IP
|
|
||||||
ProtocolPIM = 103 // Protocol Independent Multicast
|
|
||||||
ProtocolARIS = 104 // ARIS
|
|
||||||
ProtocolSCPS = 105 // SCPS
|
|
||||||
ProtocolQNX = 106 // QNX
|
|
||||||
ProtocolAN = 107 // Active Networks
|
|
||||||
ProtocolIPComp = 108 // IP Payload Compression Protocol
|
|
||||||
ProtocolSNP = 109 // Sitara Networks Protocol
|
|
||||||
ProtocolCompaqPeer = 110 // Compaq Peer Protocol
|
|
||||||
ProtocolIPXinIP = 111 // IPX in IP
|
|
||||||
ProtocolVRRP = 112 // Virtual Router Redundancy Protocol
|
|
||||||
ProtocolPGM = 113 // PGM Reliable Transport Protocol
|
|
||||||
ProtocolL2TP = 115 // Layer Two Tunneling Protocol
|
|
||||||
ProtocolDDX = 116 // D-II Data Exchange (DDX)
|
|
||||||
ProtocolIATP = 117 // Interactive Agent Transfer Protocol
|
|
||||||
ProtocolSTP = 118 // Schedule Transfer Protocol
|
|
||||||
ProtocolSRP = 119 // SpectraLink Radio Protocol
|
|
||||||
ProtocolUTI = 120 // UTI
|
|
||||||
ProtocolSMP = 121 // Simple Message Protocol
|
|
||||||
ProtocolSM = 122 // Simple Multicast Protocol
|
|
||||||
ProtocolPTP = 123 // Performance Transparency Protocol
|
|
||||||
ProtocolISIS = 124 // ISIS over IPv4
|
|
||||||
ProtocolFIRE = 125 // FIRE
|
|
||||||
ProtocolCRTP = 126 // Combat Radio Transport Protocol
|
|
||||||
ProtocolCRUDP = 127 // Combat Radio User Datagram
|
|
||||||
ProtocolSSCOPMCE = 128 // SSCOPMCE
|
|
||||||
ProtocolIPLT = 129 // IPLT
|
|
||||||
ProtocolSPS = 130 // Secure Packet Shield
|
|
||||||
ProtocolPIPE = 131 // Private IP Encapsulation within IP
|
|
||||||
ProtocolSCTP = 132 // Stream Control Transmission Protocol
|
|
||||||
ProtocolFC = 133 // Fibre Channel
|
|
||||||
ProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE
|
|
||||||
ProtocolMobilityHeader = 135 // Mobility Header
|
|
||||||
ProtocolUDPLite = 136 // UDPLite
|
|
||||||
ProtocolMPLSinIP = 137 // MPLS-in-IP
|
|
||||||
ProtocolMANET = 138 // MANET Protocols
|
|
||||||
ProtocolHIP = 139 // Host Identity Protocol
|
|
||||||
ProtocolShim6 = 140 // Shim6 Protocol
|
|
||||||
ProtocolWESP = 141 // Wrapped Encapsulating Security Payload
|
|
||||||
ProtocolROHC = 142 // Robust Header Compression
|
|
||||||
ProtocolReserved = 255 // Reserved
|
|
||||||
)
|
|
||||||
289
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/internal/iana/gen.go
generated
vendored
289
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/internal/iana/gen.go
generated
vendored
@@ -1,289 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
//go:generate go run gen.go
|
|
||||||
|
|
||||||
// This program generates internet protocol constants and tables by
|
|
||||||
// reading IANA protocol registries.
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/xml"
|
|
||||||
"fmt"
|
|
||||||
"go/format"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
var registries = []struct {
|
|
||||||
url string
|
|
||||||
parse func(io.Writer, io.Reader) error
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/dscp-registry/dscp-registry.xml",
|
|
||||||
parseDSCPRegistry,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml",
|
|
||||||
parseTOSTCByte,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml",
|
|
||||||
parseProtocolNumbers,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var bb bytes.Buffer
|
|
||||||
fmt.Fprintf(&bb, "// go generate gen.go\n")
|
|
||||||
fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
|
|
||||||
fmt.Fprintf(&bb, "// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).\n")
|
|
||||||
fmt.Fprintf(&bb, "package iana\n\n")
|
|
||||||
for _, r := range registries {
|
|
||||||
resp, err := http.Get(r.url)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
|
||||||
fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if err := r.parse(&bb, resp.Body); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&bb, "\n")
|
|
||||||
}
|
|
||||||
b, err := format.Source(bb.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if err := ioutil.WriteFile("const.go", b, 0644); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseDSCPRegistry(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var dr dscpRegistry
|
|
||||||
if err := dec.Decode(&dr); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
drs := dr.escape()
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", dr.Title, dr.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, dr := range drs {
|
|
||||||
fmt.Fprintf(w, "DiffServ%s = %#x", dr.Name, dr.Value)
|
|
||||||
fmt.Fprintf(w, "// %s\n", dr.OrigName)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type dscpRegistry struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
Note string `xml:"note"`
|
|
||||||
RegTitle string `xml:"registry>title"`
|
|
||||||
PoolRecords []struct {
|
|
||||||
Name string `xml:"name"`
|
|
||||||
Space string `xml:"space"`
|
|
||||||
} `xml:"registry>record"`
|
|
||||||
Records []struct {
|
|
||||||
Name string `xml:"name"`
|
|
||||||
Space string `xml:"space"`
|
|
||||||
} `xml:"registry>registry>record"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonDSCPRecord struct {
|
|
||||||
OrigName string
|
|
||||||
Name string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (drr *dscpRegistry) escape() []canonDSCPRecord {
|
|
||||||
drs := make([]canonDSCPRecord, len(drr.Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"+", "",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, dr := range drr.Records {
|
|
||||||
s := strings.TrimSpace(dr.Name)
|
|
||||||
drs[i].OrigName = s
|
|
||||||
drs[i].Name = sr.Replace(s)
|
|
||||||
n, err := strconv.ParseUint(dr.Space, 2, 8)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
drs[i].Value = int(n) << 2
|
|
||||||
}
|
|
||||||
return drs
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseTOSTCByte(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var ttb tosTCByte
|
|
||||||
if err := dec.Decode(&ttb); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
trs := ttb.escape()
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", ttb.Title, ttb.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, tr := range trs {
|
|
||||||
fmt.Fprintf(w, "%s = %#x", tr.Keyword, tr.Value)
|
|
||||||
fmt.Fprintf(w, "// %s\n", tr.OrigKeyword)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type tosTCByte struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
Note string `xml:"note"`
|
|
||||||
RegTitle string `xml:"registry>title"`
|
|
||||||
Records []struct {
|
|
||||||
Binary string `xml:"binary"`
|
|
||||||
Keyword string `xml:"keyword"`
|
|
||||||
} `xml:"registry>record"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonTOSTCByteRecord struct {
|
|
||||||
OrigKeyword string
|
|
||||||
Keyword string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ttb *tosTCByte) escape() []canonTOSTCByteRecord {
|
|
||||||
trs := make([]canonTOSTCByteRecord, len(ttb.Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"Capable", "",
|
|
||||||
"(", "",
|
|
||||||
")", "",
|
|
||||||
"+", "",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, tr := range ttb.Records {
|
|
||||||
s := strings.TrimSpace(tr.Keyword)
|
|
||||||
trs[i].OrigKeyword = s
|
|
||||||
ss := strings.Split(s, " ")
|
|
||||||
if len(ss) > 1 {
|
|
||||||
trs[i].Keyword = strings.Join(ss[1:], " ")
|
|
||||||
} else {
|
|
||||||
trs[i].Keyword = ss[0]
|
|
||||||
}
|
|
||||||
trs[i].Keyword = sr.Replace(trs[i].Keyword)
|
|
||||||
n, err := strconv.ParseUint(tr.Binary, 2, 8)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
trs[i].Value = int(n)
|
|
||||||
}
|
|
||||||
return trs
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseProtocolNumbers(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var pn protocolNumbers
|
|
||||||
if err := dec.Decode(&pn); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prs := pn.escape()
|
|
||||||
prs = append([]canonProtocolRecord{{
|
|
||||||
Name: "IP",
|
|
||||||
Descr: "IPv4 encapsulation, pseudo protocol number",
|
|
||||||
Value: 0,
|
|
||||||
}}, prs...)
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Name == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "Protocol%s = %d", pr.Name, pr.Value)
|
|
||||||
s := pr.Descr
|
|
||||||
if s == "" {
|
|
||||||
s = pr.OrigName
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "// %s\n", s)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type protocolNumbers struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
RegTitle string `xml:"registry>title"`
|
|
||||||
Note string `xml:"registry>note"`
|
|
||||||
Records []struct {
|
|
||||||
Value string `xml:"value"`
|
|
||||||
Name string `xml:"name"`
|
|
||||||
Descr string `xml:"description"`
|
|
||||||
} `xml:"registry>record"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonProtocolRecord struct {
|
|
||||||
OrigName string
|
|
||||||
Name string
|
|
||||||
Descr string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pn *protocolNumbers) escape() []canonProtocolRecord {
|
|
||||||
prs := make([]canonProtocolRecord, len(pn.Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"-in-", "in",
|
|
||||||
"-within-", "within",
|
|
||||||
"-over-", "over",
|
|
||||||
"+", "P",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, pr := range pn.Records {
|
|
||||||
prs[i].OrigName = pr.Name
|
|
||||||
s := strings.TrimSpace(pr.Name)
|
|
||||||
switch pr.Name {
|
|
||||||
case "ISIS over IPv4":
|
|
||||||
prs[i].Name = "ISIS"
|
|
||||||
case "manet":
|
|
||||||
prs[i].Name = "MANET"
|
|
||||||
default:
|
|
||||||
prs[i].Name = sr.Replace(s)
|
|
||||||
}
|
|
||||||
ss := strings.Split(pr.Descr, "\n")
|
|
||||||
for i := range ss {
|
|
||||||
ss[i] = strings.TrimSpace(ss[i])
|
|
||||||
}
|
|
||||||
if len(ss) > 1 {
|
|
||||||
prs[i].Descr = strings.Join(ss, " ")
|
|
||||||
} else {
|
|
||||||
prs[i].Descr = ss[0]
|
|
||||||
}
|
|
||||||
prs[i].Value, _ = strconv.Atoi(pr.Value)
|
|
||||||
}
|
|
||||||
return prs
|
|
||||||
}
|
|
||||||
70
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control.go
generated
vendored
70
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control.go
generated
vendored
@@ -1,70 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
type rawOpt struct {
|
|
||||||
sync.RWMutex
|
|
||||||
cflags ControlFlags
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *rawOpt) set(f ControlFlags) { c.cflags |= f }
|
|
||||||
func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f }
|
|
||||||
func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 }
|
|
||||||
|
|
||||||
type ControlFlags uint
|
|
||||||
|
|
||||||
const (
|
|
||||||
FlagTTL ControlFlags = 1 << iota // pass the TTL on the received packet
|
|
||||||
FlagSrc // pass the source address on the received packet
|
|
||||||
FlagDst // pass the destination address on the received packet
|
|
||||||
FlagInterface // pass the interface index on the received packet
|
|
||||||
)
|
|
||||||
|
|
||||||
// A ControlMessage represents per packet basis IP-level socket options.
|
|
||||||
type ControlMessage struct {
|
|
||||||
// Receiving socket options: SetControlMessage allows to
|
|
||||||
// receive the options from the protocol stack using ReadFrom
|
|
||||||
// method of PacketConn or RawConn.
|
|
||||||
//
|
|
||||||
// Specifying socket options: ControlMessage for WriteTo
|
|
||||||
// method of PacketConn or RawConn allows to send the options
|
|
||||||
// to the protocol stack.
|
|
||||||
//
|
|
||||||
TTL int // time-to-live, receiving only
|
|
||||||
Src net.IP // source address, specifying only
|
|
||||||
Dst net.IP // destination address, receiving only
|
|
||||||
IfIndex int // interface index, must be 1 <= value when specifying
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cm *ControlMessage) String() string {
|
|
||||||
if cm == nil {
|
|
||||||
return "<nil>"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("ttl: %v, src: %v, dst: %v, ifindex: %v", cm.TTL, cm.Src, cm.Dst, cm.IfIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ancillary data socket options
|
|
||||||
const (
|
|
||||||
ctlTTL = iota // header field
|
|
||||||
ctlSrc // header field
|
|
||||||
ctlDst // header field
|
|
||||||
ctlInterface // inbound or outbound interface
|
|
||||||
ctlPacketInfo // inbound or outbound packet path
|
|
||||||
ctlMax
|
|
||||||
)
|
|
||||||
|
|
||||||
// A ctlOpt represents a binding for ancillary data socket option.
|
|
||||||
type ctlOpt struct {
|
|
||||||
name int // option name, must be equal or greater than 1
|
|
||||||
length int // option length
|
|
||||||
marshal func([]byte, *ControlMessage) []byte
|
|
||||||
parse func(*ControlMessage, []byte)
|
|
||||||
}
|
|
||||||
40
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_bsd.go
generated
vendored
40
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_bsd.go
generated
vendored
@@ -1,40 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func marshalDst(b []byte, cm *ControlMessage) []byte {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
m.Level = iana.ProtocolIP
|
|
||||||
m.Type = sysIP_RECVDSTADDR
|
|
||||||
m.SetLen(syscall.CmsgLen(net.IPv4len))
|
|
||||||
return b[syscall.CmsgSpace(net.IPv4len):]
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseDst(cm *ControlMessage, b []byte) {
|
|
||||||
cm.Dst = b[:net.IPv4len]
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalInterface(b []byte, cm *ControlMessage) []byte {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
m.Level = iana.ProtocolIP
|
|
||||||
m.Type = sysIP_RECVIF
|
|
||||||
m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrDatalink))
|
|
||||||
return b[syscall.CmsgSpace(syscall.SizeofSockaddrDatalink):]
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseInterface(cm *ControlMessage, b []byte) {
|
|
||||||
sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&b[0]))
|
|
||||||
cm.IfIndex = int(sadl.Index)
|
|
||||||
}
|
|
||||||
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_pktinfo.go
generated
vendored
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_pktinfo.go
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin linux
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
m.Level = iana.ProtocolIP
|
|
||||||
m.Type = sysIP_PKTINFO
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofInetPktinfo))
|
|
||||||
if cm != nil {
|
|
||||||
pi := (*sysInetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
|
|
||||||
if ip := cm.Src.To4(); ip != nil {
|
|
||||||
copy(pi.Spec_dst[:], ip)
|
|
||||||
}
|
|
||||||
if cm.IfIndex != 0 {
|
|
||||||
pi.setIfindex(cm.IfIndex)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return b[syscall.CmsgSpace(sysSizeofInetPktinfo):]
|
|
||||||
}
|
|
||||||
|
|
||||||
func parsePacketInfo(cm *ControlMessage, b []byte) {
|
|
||||||
pi := (*sysInetPktinfo)(unsafe.Pointer(&b[0]))
|
|
||||||
cm.IfIndex = int(pi.Ifindex)
|
|
||||||
cm.Dst = pi.Addr[:]
|
|
||||||
}
|
|
||||||
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_stub.go
generated
vendored
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_stub.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) []byte {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) []byte {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
166
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_unix.go
generated
vendored
166
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_unix.go
generated
vendored
@@ -1,166 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
opt.Lock()
|
|
||||||
defer opt.Unlock()
|
|
||||||
if cf&FlagTTL != 0 {
|
|
||||||
if err := setInt(fd, &sockOpts[ssoReceiveTTL], boolint(on)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagTTL)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagTTL)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if sockOpts[ssoPacketInfo].name > 0 {
|
|
||||||
if cf&(FlagSrc|FlagDst|FlagInterface) != 0 {
|
|
||||||
if err := setInt(fd, &sockOpts[ssoPacketInfo], boolint(on)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(cf & (FlagSrc | FlagDst | FlagInterface))
|
|
||||||
} else {
|
|
||||||
opt.clear(cf & (FlagSrc | FlagDst | FlagInterface))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if cf&FlagDst != 0 {
|
|
||||||
if err := setInt(fd, &sockOpts[ssoReceiveDst], boolint(on)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagDst)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagDst)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if cf&FlagInterface != 0 {
|
|
||||||
if err := setInt(fd, &sockOpts[ssoReceiveInterface], boolint(on)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagInterface)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagInterface)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) (oob []byte) {
|
|
||||||
opt.RLock()
|
|
||||||
var l int
|
|
||||||
if opt.isset(FlagTTL) {
|
|
||||||
l += syscall.CmsgSpace(ctlOpts[ctlTTL].length)
|
|
||||||
}
|
|
||||||
if ctlOpts[ctlPacketInfo].name > 0 {
|
|
||||||
if opt.isset(FlagSrc | FlagDst | FlagInterface) {
|
|
||||||
l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if opt.isset(FlagDst) {
|
|
||||||
l += syscall.CmsgSpace(ctlOpts[ctlDst].length)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagInterface) {
|
|
||||||
l += syscall.CmsgSpace(ctlOpts[ctlInterface].length)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
b := oob
|
|
||||||
if opt.isset(FlagTTL) {
|
|
||||||
b = ctlOpts[ctlTTL].marshal(b, nil)
|
|
||||||
}
|
|
||||||
if ctlOpts[ctlPacketInfo].name > 0 {
|
|
||||||
if opt.isset(FlagSrc | FlagDst | FlagInterface) {
|
|
||||||
b = ctlOpts[ctlPacketInfo].marshal(b, nil)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if opt.isset(FlagDst) {
|
|
||||||
b = ctlOpts[ctlDst].marshal(b, nil)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagInterface) {
|
|
||||||
b = ctlOpts[ctlInterface].marshal(b, nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
opt.RUnlock()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
if len(b) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
cmsgs, err := syscall.ParseSocketControlMessage(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, os.NewSyscallError("parse socket control message", err)
|
|
||||||
}
|
|
||||||
cm := &ControlMessage{}
|
|
||||||
for _, m := range cmsgs {
|
|
||||||
if m.Header.Level != iana.ProtocolIP {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch int(m.Header.Type) {
|
|
||||||
case ctlOpts[ctlTTL].name:
|
|
||||||
ctlOpts[ctlTTL].parse(cm, m.Data[:])
|
|
||||||
case ctlOpts[ctlDst].name:
|
|
||||||
ctlOpts[ctlDst].parse(cm, m.Data[:])
|
|
||||||
case ctlOpts[ctlInterface].name:
|
|
||||||
ctlOpts[ctlInterface].parse(cm, m.Data[:])
|
|
||||||
case ctlOpts[ctlPacketInfo].name:
|
|
||||||
ctlOpts[ctlPacketInfo].parse(cm, m.Data[:])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cm, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
|
|
||||||
if cm == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var l int
|
|
||||||
if ctlOpts[ctlPacketInfo].name > 0 {
|
|
||||||
if cm.Src.To4() != nil || cm.IfIndex != 0 {
|
|
||||||
l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
b := oob
|
|
||||||
if ctlOpts[ctlPacketInfo].name > 0 {
|
|
||||||
if cm.Src.To4() != nil || cm.IfIndex != 0 {
|
|
||||||
b = ctlOpts[ctlPacketInfo].marshal(b, cm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalTTL(b []byte, cm *ControlMessage) []byte {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
m.Level = iana.ProtocolIP
|
|
||||||
m.Type = sysIP_RECVTTL
|
|
||||||
m.SetLen(syscall.CmsgLen(1))
|
|
||||||
return b[syscall.CmsgSpace(1):]
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseTTL(cm *ControlMessage, b []byte) {
|
|
||||||
cm.TTL = int(*(*byte)(unsafe.Pointer(&b[:1][0])))
|
|
||||||
}
|
|
||||||
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_windows.go
generated
vendored
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/control_windows.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return syscall.EWINDOWS
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) []byte {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, syscall.EWINDOWS
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) []byte {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
57
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_darwin.go
generated
vendored
57
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_darwin.go
generated
vendored
@@ -1,57 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_STRIPHDR = C.IP_STRIPHDR
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
sysIP_BOUND_IF = C.IP_BOUND_IF
|
|
||||||
sysIP_PKTINFO = C.IP_PKTINFO
|
|
||||||
sysIP_RECVPKTINFO = C.IP_RECVPKTINFO
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF
|
|
||||||
sysIP_MULTICAST_IFINDEX = C.IP_MULTICAST_IFINDEX
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
|
|
||||||
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
|
|
||||||
sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo C.struct_in_pktinfo
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
|
|
||||||
type sysIPMreqn C.struct_ip_mreqn
|
|
||||||
|
|
||||||
type sysIPMreqSource C.struct_ip_mreq_source
|
|
||||||
38
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_dragonfly.go
generated
vendored
38
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_dragonfly.go
generated
vendored
@@ -1,38 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
54
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_freebsd.go
generated
vendored
54
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_freebsd.go
generated
vendored
@@ -1,54 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_SENDSRCADDR = C.IP_SENDSRCADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_ONESBCAST = C.IP_ONESBCAST
|
|
||||||
sysIP_BINDANY = C.IP_BINDANY
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
sysIP_MINTTL = C.IP_MINTTL
|
|
||||||
sysIP_DONTFRAG = C.IP_DONTFRAG
|
|
||||||
sysIP_RECVTOS = C.IP_RECVTOS
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
sysIP_MULTICAST_VIF = C.IP_MULTICAST_VIF
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
|
|
||||||
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
|
|
||||||
sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
|
|
||||||
type sysIPMreqn C.struct_ip_mreqn
|
|
||||||
|
|
||||||
type sysIPMreqSource C.struct_ip_mreq_source
|
|
||||||
82
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_linux.go
generated
vendored
82
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_linux.go
generated
vendored
@@ -1,82 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <linux/errqueue.h>
|
|
||||||
#include <linux/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_ROUTER_ALERT = C.IP_ROUTER_ALERT
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_PKTINFO = C.IP_PKTINFO
|
|
||||||
sysIP_PKTOPTIONS = C.IP_PKTOPTIONS
|
|
||||||
sysIP_MTU_DISCOVER = C.IP_MTU_DISCOVER
|
|
||||||
sysIP_RECVERR = C.IP_RECVERR
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
sysIP_RECVTOS = C.IP_RECVTOS
|
|
||||||
sysIP_MTU = C.IP_MTU
|
|
||||||
sysIP_FREEBIND = C.IP_FREEBIND
|
|
||||||
sysIP_TRANSPARENT = C.IP_TRANSPARENT
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_ORIGDSTADDR = C.IP_ORIGDSTADDR
|
|
||||||
sysIP_RECVORIGDSTADDR = C.IP_RECVORIGDSTADDR
|
|
||||||
sysIP_MINTTL = C.IP_MINTTL
|
|
||||||
sysIP_NODEFRAG = C.IP_NODEFRAG
|
|
||||||
sysIP_UNICAST_IF = C.IP_UNICAST_IF
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
|
|
||||||
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_MULTICAST_ALL = C.IP_MULTICAST_ALL
|
|
||||||
|
|
||||||
sysIP_PMTUDISC_DONT = C.IP_PMTUDISC_DONT
|
|
||||||
sysIP_PMTUDISC_WANT = C.IP_PMTUDISC_WANT
|
|
||||||
sysIP_PMTUDISC_DO = C.IP_PMTUDISC_DO
|
|
||||||
sysIP_PMTUDISC_PROBE = C.IP_PMTUDISC_PROBE
|
|
||||||
sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE
|
|
||||||
sysIP_PMTUDISC_OMIT = C.IP_PMTUDISC_OMIT
|
|
||||||
|
|
||||||
sysSO_EE_ORIGIN_NONE = C.SO_EE_ORIGIN_NONE
|
|
||||||
sysSO_EE_ORIGIN_LOCAL = C.SO_EE_ORIGIN_LOCAL
|
|
||||||
sysSO_EE_ORIGIN_ICMP = C.SO_EE_ORIGIN_ICMP
|
|
||||||
sysSO_EE_ORIGIN_ICMP6 = C.SO_EE_ORIGIN_ICMP6
|
|
||||||
sysSO_EE_ORIGIN_TXSTATUS = C.SO_EE_ORIGIN_TXSTATUS
|
|
||||||
sysSO_EE_ORIGIN_TIMESTAMPING = C.SO_EE_ORIGIN_TIMESTAMPING
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
|
|
||||||
sysSizeofSockExtendedErr = C.sizeof_struct_sock_extended_err
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
|
|
||||||
sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo C.struct_in_pktinfo
|
|
||||||
|
|
||||||
type sysSockExtendedErr C.struct_sock_extended_err
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
|
|
||||||
type sysIPMreqn C.struct_ip_mreqn
|
|
||||||
|
|
||||||
type sysIPMreqSource C.struct_ip_mreq_source
|
|
||||||
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_netbsd.go
generated
vendored
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_netbsd.go
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_openbsd.go
generated
vendored
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_openbsd.go
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
57
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_solaris.go
generated
vendored
57
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/defs_solaris.go
generated
vendored
@@ -1,57 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in_addr [4]byte /* in_addr */
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = C.IP_OPTIONS
|
|
||||||
sysIP_HDRINCL = C.IP_HDRINCL
|
|
||||||
sysIP_TOS = C.IP_TOS
|
|
||||||
sysIP_TTL = C.IP_TTL
|
|
||||||
sysIP_RECVOPTS = C.IP_RECVOPTS
|
|
||||||
sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
|
|
||||||
sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
|
|
||||||
sysIP_RETOPTS = C.IP_RETOPTS
|
|
||||||
sysIP_RECVIF = C.IP_RECVIF
|
|
||||||
sysIP_RECVSLLA = C.IP_RECVSLLA
|
|
||||||
sysIP_RECVTTL = C.IP_RECVTTL
|
|
||||||
sysIP_NEXTHOP = C.IP_NEXTHOP
|
|
||||||
sysIP_PKTINFO = C.IP_PKTINFO
|
|
||||||
sysIP_RECVPKTINFO = C.IP_RECVPKTINFO
|
|
||||||
sysIP_DONTFRAG = C.IP_DONTFRAG
|
|
||||||
sysIP_BOUND_IF = C.IP_BOUND_IF
|
|
||||||
sysIP_UNSPEC_SRC = C.IP_UNSPEC_SRC
|
|
||||||
sysIP_BROADCAST_TTL = C.IP_BROADCAST_TTL
|
|
||||||
sysIP_DHCPINIT_IF = C.IP_DHCPINIT_IF
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
|
|
||||||
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
|
|
||||||
sysIP_MULTICAST_LOOP = C.IP_MULTICAST_LOOP
|
|
||||||
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
|
|
||||||
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
|
|
||||||
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
|
|
||||||
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
|
|
||||||
|
|
||||||
sysSizeofIPMreq = C.sizeof_struct_ip_mreq
|
|
||||||
sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo C.struct_in_pktinfo
|
|
||||||
|
|
||||||
type sysIPMreq C.struct_ip_mreq
|
|
||||||
|
|
||||||
type sysIPMreqSource C.struct_ip_mreq_source
|
|
||||||
129
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/dgramopt_posix.go
generated
vendored
129
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/dgramopt_posix.go
generated
vendored
@@ -1,129 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MulticastTTL returns the time-to-live field value for outgoing
|
|
||||||
// multicast packets.
|
|
||||||
func (c *dgramOpt) MulticastTTL() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return getInt(fd, &sockOpts[ssoMulticastTTL])
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastTTL sets the time-to-live field value for future
|
|
||||||
// outgoing multicast packets.
|
|
||||||
func (c *dgramOpt) SetMulticastTTL(ttl int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setInt(fd, &sockOpts[ssoMulticastTTL], ttl)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastInterface returns the default interface for multicast
|
|
||||||
// packet transmissions.
|
|
||||||
func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return getInterface(fd, &sockOpts[ssoMulticastInterface])
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastInterface sets the default interface for future
|
|
||||||
// multicast packet transmissions.
|
|
||||||
func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setInterface(fd, &sockOpts[ssoMulticastInterface], ifi)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastLoopback reports whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) MulticastLoopback() (bool, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return false, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
on, err := getInt(fd, &sockOpts[ssoMulticastLoopback])
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return on == 1, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastLoopback sets whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) SetMulticastLoopback(on bool) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setInt(fd, &sockOpts[ssoMulticastLoopback], boolint(on))
|
|
||||||
}
|
|
||||||
|
|
||||||
// JoinGroup joins the group address group on the interface ifi.
|
|
||||||
// It uses the system assigned multicast interface when ifi is nil,
|
|
||||||
// although this is not recommended because the assignment depends on
|
|
||||||
// platforms and sometimes it might require routing configuration.
|
|
||||||
func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
grp := netAddrToIP4(group)
|
|
||||||
if grp == nil {
|
|
||||||
return errMissingAddress
|
|
||||||
}
|
|
||||||
return setGroup(fd, &sockOpts[ssoJoinGroup], ifi, grp)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LeaveGroup leaves the group address group on the interface ifi.
|
|
||||||
func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
grp := netAddrToIP4(group)
|
|
||||||
if grp == nil {
|
|
||||||
return errMissingAddress
|
|
||||||
}
|
|
||||||
return setGroup(fd, &sockOpts[ssoLeaveGroup], ifi, grp)
|
|
||||||
}
|
|
||||||
49
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/dgramopt_stub.go
generated
vendored
49
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/dgramopt_stub.go
generated
vendored
@@ -1,49 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func (c *dgramOpt) MulticastTTL() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) SetMulticastTTL(ttl int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) MulticastLoopback() (bool, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return false, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) SetMulticastLoopback(on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) JoinGroup(ifi *net.Interface, grp net.Addr) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) LeaveGroup(ifi *net.Interface, grp net.Addr) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
196
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/doc.go
generated
vendored
196
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/doc.go
generated
vendored
@@ -1,196 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package ipv4 implements IP-level socket options for the Internet
|
|
||||||
// Protocol version 4.
|
|
||||||
//
|
|
||||||
// The package provides IP-level socket options that allow
|
|
||||||
// manipulation of IPv4 facilities. The IPv4 and basic host
|
|
||||||
// requirements for IPv4 are defined in RFC 791, RFC 1112 and RFC
|
|
||||||
// 1122.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Unicasting
|
|
||||||
//
|
|
||||||
// The options for unicasting are available for net.TCPConn,
|
|
||||||
// net.UDPConn and net.IPConn which are created as network connections
|
|
||||||
// that use the IPv4 transport. When a single TCP connection carrying
|
|
||||||
// a data flow of multiple packets needs to indicate the flow is
|
|
||||||
// important, ipv4.Conn is used to set the type-of-service field on
|
|
||||||
// the IPv4 header for each packet.
|
|
||||||
//
|
|
||||||
// ln, err := net.Listen("tcp4", "0.0.0.0:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer ln.Close()
|
|
||||||
// for {
|
|
||||||
// c, err := ln.Accept()
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// go func(c net.Conn) {
|
|
||||||
// defer c.Close()
|
|
||||||
//
|
|
||||||
// The outgoing packets will be labeled DiffServ assured forwarding
|
|
||||||
// class 1 low drop precedence, as known as AF11 packets.
|
|
||||||
//
|
|
||||||
// if err := ipv4.NewConn(c).SetTOS(DiffServAF11); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if _, err := c.Write(data); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// }(c)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Multicasting
|
|
||||||
//
|
|
||||||
// The options for multicasting are available for net.UDPConn and
|
|
||||||
// net.IPconn which are created as network connections that use the
|
|
||||||
// IPv4 transport. A few network facilities must be prepared before
|
|
||||||
// you begin multicasting, at a minimum joining network interfaces and
|
|
||||||
// multicast groups.
|
|
||||||
//
|
|
||||||
// en0, err := net.InterfaceByName("en0")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// en1, err := net.InterfaceByIndex(911)
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// group := net.IPv4(224, 0, 0, 250)
|
|
||||||
//
|
|
||||||
// First, an application listens to an appropriate address with an
|
|
||||||
// appropriate service port.
|
|
||||||
//
|
|
||||||
// c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c.Close()
|
|
||||||
//
|
|
||||||
// Second, the application joins multicast groups, starts listening to
|
|
||||||
// the groups on the specified network interfaces. Note that the
|
|
||||||
// service port for transport layer protocol does not matter with this
|
|
||||||
// operation as joining groups affects only network and link layer
|
|
||||||
// protocols, such as IPv4 and Ethernet.
|
|
||||||
//
|
|
||||||
// p := ipv4.NewPacketConn(c)
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application might set per packet control message transmissions
|
|
||||||
// between the protocol stack within the kernel. When the application
|
|
||||||
// needs a destination address on an incoming packet,
|
|
||||||
// SetControlMessage of ipv4.PacketConn is used to enable control
|
|
||||||
// message transmissons.
|
|
||||||
//
|
|
||||||
// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application could identify whether the received packets are
|
|
||||||
// of interest by using the control message that contains the
|
|
||||||
// destination address of the received packet.
|
|
||||||
//
|
|
||||||
// b := make([]byte, 1500)
|
|
||||||
// for {
|
|
||||||
// n, cm, src, err := p.ReadFrom(b)
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if cm.Dst.IsMulticast() {
|
|
||||||
// if cm.Dst.Equal(group)
|
|
||||||
// // joined group, do something
|
|
||||||
// } else {
|
|
||||||
// // unknown group, discard
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application can also send both unicast and multicast packets.
|
|
||||||
//
|
|
||||||
// p.SetTOS(DiffServCS0)
|
|
||||||
// p.SetTTL(16)
|
|
||||||
// if _, err := p.WriteTo(data, nil, src); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// dst := &net.UDPAddr{IP: group, Port: 1024}
|
|
||||||
// for _, ifi := range []*net.Interface{en0, en1} {
|
|
||||||
// if err := p.SetMulticastInterface(ifi); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// p.SetMulticastTTL(2)
|
|
||||||
// if _, err := p.WriteTo(data, nil, dst); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// More multicasting
|
|
||||||
//
|
|
||||||
// An application that uses PacketConn or RawConn may join multiple
|
|
||||||
// multicast groups. For example, a UDP listener with port 1024 might
|
|
||||||
// join two different groups across over two different network
|
|
||||||
// interfaces by using:
|
|
||||||
//
|
|
||||||
// c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c.Close()
|
|
||||||
// p := ipv4.NewPacketConn(c)
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// It is possible for multiple UDP listeners that listen on the same
|
|
||||||
// UDP port to join the same multicast group. The net package will
|
|
||||||
// provide a socket that listens to a wildcard address with reusable
|
|
||||||
// UDP port when an appropriate multicast address prefix is passed to
|
|
||||||
// the net.ListenPacket or net.ListenUDP.
|
|
||||||
//
|
|
||||||
// c1, err := net.ListenPacket("udp4", "224.0.0.0:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c1.Close()
|
|
||||||
// c2, err := net.ListenPacket("udp4", "224.0.0.0:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c2.Close()
|
|
||||||
// p1 := ipv4.NewPacketConn(c1)
|
|
||||||
// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// p2 := ipv4.NewPacketConn(c2)
|
|
||||||
// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Also it is possible for the application to leave or rejoin a
|
|
||||||
// multicast group on the network interface.
|
|
||||||
//
|
|
||||||
// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
package ipv4
|
|
||||||
181
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/endpoint.go
generated
vendored
181
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/endpoint.go
generated
vendored
@@ -1,181 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Conn represents a network endpoint that uses the IPv4 transport.
|
|
||||||
// It is used to control basic IP-level socket options such as TOS and
|
|
||||||
// TTL.
|
|
||||||
type Conn struct {
|
|
||||||
genericOpt
|
|
||||||
}
|
|
||||||
|
|
||||||
type genericOpt struct {
|
|
||||||
net.Conn
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
|
|
||||||
|
|
||||||
// NewConn returns a new Conn.
|
|
||||||
func NewConn(c net.Conn) *Conn {
|
|
||||||
return &Conn{
|
|
||||||
genericOpt: genericOpt{Conn: c},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// A PacketConn represents a packet network endpoint that uses the
|
|
||||||
// IPv4 transport. It is used to control several IP-level socket
|
|
||||||
// options including multicasting. It also provides datagram based
|
|
||||||
// network I/O methods specific to the IPv4 and higher layer protocols
|
|
||||||
// such as UDP.
|
|
||||||
type PacketConn struct {
|
|
||||||
genericOpt
|
|
||||||
dgramOpt
|
|
||||||
payloadHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
type dgramOpt struct {
|
|
||||||
net.PacketConn
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
|
|
||||||
|
|
||||||
// SetControlMessage sets the per packet IP-level socket options.
|
|
||||||
func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.payloadHandler.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setControlMessage(fd, &c.payloadHandler.rawOpt, cf, on)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetDeadline sets the read and write deadlines associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.PacketConn.SetDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetReadDeadline sets the read deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetReadDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.PacketConn.SetReadDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetWriteDeadline sets the write deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetWriteDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.PacketConn.SetWriteDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the endpoint.
|
|
||||||
func (c *PacketConn) Close() error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.PacketConn.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPacketConn returns a new PacketConn using c as its underlying
|
|
||||||
// transport.
|
|
||||||
func NewPacketConn(c net.PacketConn) *PacketConn {
|
|
||||||
return &PacketConn{
|
|
||||||
genericOpt: genericOpt{Conn: c.(net.Conn)},
|
|
||||||
dgramOpt: dgramOpt{PacketConn: c},
|
|
||||||
payloadHandler: payloadHandler{PacketConn: c},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// A RawConn represents a packet network endpoint that uses the IPv4
|
|
||||||
// transport. It is used to control several IP-level socket options
|
|
||||||
// including IPv4 header manipulation. It also provides datagram
|
|
||||||
// based network I/O methods specific to the IPv4 and higher layer
|
|
||||||
// protocols that handle IPv4 datagram directly such as OSPF, GRE.
|
|
||||||
type RawConn struct {
|
|
||||||
genericOpt
|
|
||||||
dgramOpt
|
|
||||||
packetHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetControlMessage sets the per packet IP-level socket options.
|
|
||||||
func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error {
|
|
||||||
if !c.packetHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.packetHandler.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setControlMessage(fd, &c.packetHandler.rawOpt, cf, on)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetDeadline sets the read and write deadlines associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *RawConn) SetDeadline(t time.Time) error {
|
|
||||||
if !c.packetHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.packetHandler.c.SetDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetReadDeadline sets the read deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *RawConn) SetReadDeadline(t time.Time) error {
|
|
||||||
if !c.packetHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.packetHandler.c.SetReadDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetWriteDeadline sets the write deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *RawConn) SetWriteDeadline(t time.Time) error {
|
|
||||||
if !c.packetHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.packetHandler.c.SetWriteDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the endpoint.
|
|
||||||
func (c *RawConn) Close() error {
|
|
||||||
if !c.packetHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.packetHandler.c.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRawConn returns a new RawConn using c as its underlying
|
|
||||||
// transport.
|
|
||||||
func NewRawConn(c net.PacketConn) (*RawConn, error) {
|
|
||||||
r := &RawConn{
|
|
||||||
genericOpt: genericOpt{Conn: c.(net.Conn)},
|
|
||||||
dgramOpt: dgramOpt{PacketConn: c},
|
|
||||||
packetHandler: packetHandler{c: c.(*net.IPConn)},
|
|
||||||
}
|
|
||||||
fd, err := r.packetHandler.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := setInt(fd, &sockOpts[ssoHeaderPrepend], boolint(true)); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return r, nil
|
|
||||||
}
|
|
||||||
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/error_posix_test.go
generated
vendored
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/error_posix_test.go
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
func protocolNotSupported(err error) bool {
|
|
||||||
switch err := err.(type) {
|
|
||||||
case syscall.Errno:
|
|
||||||
switch err {
|
|
||||||
case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case *os.SyscallError:
|
|
||||||
switch err := err.Err.(type) {
|
|
||||||
case syscall.Errno:
|
|
||||||
switch err {
|
|
||||||
case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
11
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/error_stub_test.go
generated
vendored
11
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/error_stub_test.go
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
func protocolNotSupported(err error) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
285
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/example_test.go
generated
vendored
285
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/example_test.go
generated
vendored
@@ -1,285 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
"net"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
"github.com/hashicorp/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ExampleUnicastTCPListener() {
|
|
||||||
ln, err := net.Listen("tcp4", "0.0.0.0:1024")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer ln.Close()
|
|
||||||
for {
|
|
||||||
c, err := ln.Accept()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
go func(c net.Conn) {
|
|
||||||
defer c.Close()
|
|
||||||
err := ipv4.NewConn(c).SetTOS(iana.DiffServAF11)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
_, err = c.Write([]byte("HELLO-R-U-THERE-ACK"))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExampleMulticastUDPListener() {
|
|
||||||
en0, err := net.InterfaceByName("en0")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
en1, err := net.InterfaceByIndex(911)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
group := net.IPv4(224, 0, 0, 250)
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
err = p.JoinGroup(en0, &net.UDPAddr{IP: group})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
err = p.JoinGroup(en1, &net.UDPAddr{IP: group})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = p.SetControlMessage(ipv4.FlagDst, true)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b := make([]byte, 1500)
|
|
||||||
for {
|
|
||||||
n, cm, src, err := p.ReadFrom(b)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
if cm.Dst.IsMulticast() {
|
|
||||||
if cm.Dst.Equal(group) {
|
|
||||||
// joined group, do something
|
|
||||||
} else {
|
|
||||||
// unknown group, discard
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.SetTOS(iana.DiffServCS7)
|
|
||||||
p.SetTTL(16)
|
|
||||||
_, err = p.WriteTo(b[:n], nil, src)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
dst := &net.UDPAddr{IP: group, Port: 1024}
|
|
||||||
for _, ifi := range []*net.Interface{en0, en1} {
|
|
||||||
err := p.SetMulticastInterface(ifi)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
p.SetMulticastTTL(2)
|
|
||||||
_, err = p.WriteTo(b[:n], nil, dst)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = p.LeaveGroup(en1, &net.UDPAddr{IP: group})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
newgroup := net.IPv4(224, 0, 0, 249)
|
|
||||||
err = p.JoinGroup(en1, &net.UDPAddr{IP: newgroup})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type OSPFHeader struct {
|
|
||||||
Version byte
|
|
||||||
Type byte
|
|
||||||
Len uint16
|
|
||||||
RouterID uint32
|
|
||||||
AreaID uint32
|
|
||||||
Checksum uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
OSPFHeaderLen = 14
|
|
||||||
OSPFHelloHeaderLen = 20
|
|
||||||
OSPF_VERSION = 2
|
|
||||||
OSPF_TYPE_HELLO = iota + 1
|
|
||||||
OSPF_TYPE_DB_DESCRIPTION
|
|
||||||
OSPF_TYPE_LS_REQUEST
|
|
||||||
OSPF_TYPE_LS_UPDATE
|
|
||||||
OSPF_TYPE_LS_ACK
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
AllSPFRouters = net.IPv4(224, 0, 0, 5)
|
|
||||||
AllDRouters = net.IPv4(224, 0, 0, 6)
|
|
||||||
)
|
|
||||||
|
|
||||||
func ExampleIPOSPFListener() {
|
|
||||||
var ifs []*net.Interface
|
|
||||||
en0, err := net.InterfaceByName("en0")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
ifs = append(ifs, en0)
|
|
||||||
en1, err := net.InterfaceByIndex(911)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
ifs = append(ifs, en1)
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSFP for IPv4
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
for _, ifi := range ifs {
|
|
||||||
err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = r.SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
r.SetTOS(iana.DiffServCS6)
|
|
||||||
|
|
||||||
parseOSPFHeader := func(b []byte) *OSPFHeader {
|
|
||||||
if len(b) < OSPFHeaderLen {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return &OSPFHeader{
|
|
||||||
Version: b[0],
|
|
||||||
Type: b[1],
|
|
||||||
Len: uint16(b[2])<<8 | uint16(b[3]),
|
|
||||||
RouterID: uint32(b[4])<<24 | uint32(b[5])<<16 | uint32(b[6])<<8 | uint32(b[7]),
|
|
||||||
AreaID: uint32(b[8])<<24 | uint32(b[9])<<16 | uint32(b[10])<<8 | uint32(b[11]),
|
|
||||||
Checksum: uint16(b[12])<<8 | uint16(b[13]),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
b := make([]byte, 1500)
|
|
||||||
for {
|
|
||||||
iph, p, _, err := r.ReadFrom(b)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
if iph.Version != ipv4.Version {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if iph.Dst.IsMulticast() {
|
|
||||||
if !iph.Dst.Equal(AllSPFRouters) && !iph.Dst.Equal(AllDRouters) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ospfh := parseOSPFHeader(p)
|
|
||||||
if ospfh == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if ospfh.Version != OSPF_VERSION {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch ospfh.Type {
|
|
||||||
case OSPF_TYPE_HELLO:
|
|
||||||
case OSPF_TYPE_DB_DESCRIPTION:
|
|
||||||
case OSPF_TYPE_LS_REQUEST:
|
|
||||||
case OSPF_TYPE_LS_UPDATE:
|
|
||||||
case OSPF_TYPE_LS_ACK:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExampleWriteIPOSPFHello() {
|
|
||||||
var ifs []*net.Interface
|
|
||||||
en0, err := net.InterfaceByName("en0")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
ifs = append(ifs, en0)
|
|
||||||
en1, err := net.InterfaceByIndex(911)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
ifs = append(ifs, en1)
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSPF for IPv4
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
for _, ifi := range ifs {
|
|
||||||
err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hello := make([]byte, OSPFHelloHeaderLen)
|
|
||||||
ospf := make([]byte, OSPFHeaderLen)
|
|
||||||
ospf[0] = OSPF_VERSION
|
|
||||||
ospf[1] = OSPF_TYPE_HELLO
|
|
||||||
ospf = append(ospf, hello...)
|
|
||||||
iph := &ipv4.Header{}
|
|
||||||
iph.Version = ipv4.Version
|
|
||||||
iph.Len = ipv4.HeaderLen
|
|
||||||
iph.TOS = iana.DiffServCS6
|
|
||||||
iph.TotalLen = ipv4.HeaderLen + len(ospf)
|
|
||||||
iph.TTL = 1
|
|
||||||
iph.Protocol = 89
|
|
||||||
iph.Dst = AllSPFRouters
|
|
||||||
|
|
||||||
for _, ifi := range ifs {
|
|
||||||
err := r.SetMulticastInterface(ifi)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = r.WriteTo(iph, ospf, nil)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
201
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/gen.go
generated
vendored
201
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/gen.go
generated
vendored
@@ -1,201 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
//go:generate go run gen.go
|
|
||||||
|
|
||||||
// This program generates system adaptation constants and types,
|
|
||||||
// internet protocol constants and tables by reading template files
|
|
||||||
// and IANA protocol registries.
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/xml"
|
|
||||||
"fmt"
|
|
||||||
"go/format"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"runtime"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if err := genzsys(); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if err := geniana(); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func genzsys() error {
|
|
||||||
defs := "defs_" + runtime.GOOS + ".go"
|
|
||||||
f, err := os.Open(defs)
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
f.Close()
|
|
||||||
cmd := exec.Command("go", "tool", "cgo", "-godefs", defs)
|
|
||||||
b, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "dragonfly", "solaris":
|
|
||||||
// The ipv4 pacakge still supports go1.2, and so we
|
|
||||||
// need to take care of additional platforms in go1.3
|
|
||||||
// and above for working with go1.2.
|
|
||||||
b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv4\n"), 1)
|
|
||||||
}
|
|
||||||
b, err = format.Source(b)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := ioutil.WriteFile("zsys_"+runtime.GOOS+".go", b, 0644); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var registries = []struct {
|
|
||||||
url string
|
|
||||||
parse func(io.Writer, io.Reader) error
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml",
|
|
||||||
parseICMPv4Parameters,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func geniana() error {
|
|
||||||
var bb bytes.Buffer
|
|
||||||
fmt.Fprintf(&bb, "// go generate gen.go\n")
|
|
||||||
fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
|
|
||||||
fmt.Fprintf(&bb, "package ipv4\n\n")
|
|
||||||
for _, r := range registries {
|
|
||||||
resp, err := http.Get(r.url)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
|
||||||
return fmt.Errorf("got HTTP status code %v for %v\n", resp.StatusCode, r.url)
|
|
||||||
}
|
|
||||||
if err := r.parse(&bb, resp.Body); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&bb, "\n")
|
|
||||||
}
|
|
||||||
b, err := format.Source(bb.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := ioutil.WriteFile("iana.go", b, 0644); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseICMPv4Parameters(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var icp icmpv4Parameters
|
|
||||||
if err := dec.Decode(&icp); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prs := icp.escape()
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Descr == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Descr, pr.Value)
|
|
||||||
fmt.Fprintf(w, "// %s\n", pr.OrigDescr)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n\n")
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
|
|
||||||
fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Descr == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigDescr))
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "}\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type icmpv4Parameters struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
Registries []struct {
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Records []struct {
|
|
||||||
Value string `xml:"value"`
|
|
||||||
Descr string `xml:"description"`
|
|
||||||
} `xml:"record"`
|
|
||||||
} `xml:"registry"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonICMPv4ParamRecord struct {
|
|
||||||
OrigDescr string
|
|
||||||
Descr string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (icp *icmpv4Parameters) escape() []canonICMPv4ParamRecord {
|
|
||||||
id := -1
|
|
||||||
for i, r := range icp.Registries {
|
|
||||||
if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") {
|
|
||||||
id = i
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if id < 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
prs := make([]canonICMPv4ParamRecord, len(icp.Registries[id].Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"Messages", "",
|
|
||||||
"Message", "",
|
|
||||||
"ICMP", "",
|
|
||||||
"+", "P",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, pr := range icp.Registries[id].Records {
|
|
||||||
if strings.Contains(pr.Descr, "Reserved") ||
|
|
||||||
strings.Contains(pr.Descr, "Unassigned") ||
|
|
||||||
strings.Contains(pr.Descr, "Deprecated") ||
|
|
||||||
strings.Contains(pr.Descr, "Experiment") ||
|
|
||||||
strings.Contains(pr.Descr, "experiment") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ss := strings.Split(pr.Descr, "\n")
|
|
||||||
if len(ss) > 1 {
|
|
||||||
prs[i].Descr = strings.Join(ss, " ")
|
|
||||||
} else {
|
|
||||||
prs[i].Descr = ss[0]
|
|
||||||
}
|
|
||||||
s := strings.TrimSpace(prs[i].Descr)
|
|
||||||
prs[i].OrigDescr = s
|
|
||||||
prs[i].Descr = sr.Replace(s)
|
|
||||||
prs[i].Value, _ = strconv.Atoi(pr.Value)
|
|
||||||
}
|
|
||||||
return prs
|
|
||||||
}
|
|
||||||
59
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/genericopt_posix.go
generated
vendored
59
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/genericopt_posix.go
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// TOS returns the type-of-service field value for outgoing packets.
|
|
||||||
func (c *genericOpt) TOS() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return getInt(fd, &sockOpts[ssoTOS])
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetTOS sets the type-of-service field value for future outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) SetTOS(tos int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setInt(fd, &sockOpts[ssoTOS], tos)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TTL returns the time-to-live field value for outgoing packets.
|
|
||||||
func (c *genericOpt) TTL() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return getInt(fd, &sockOpts[ssoTTL])
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetTTL sets the time-to-live field value for future outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) SetTTL(ttl int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setInt(fd, &sockOpts[ssoTTL], ttl)
|
|
||||||
}
|
|
||||||
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/genericopt_stub.go
generated
vendored
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/genericopt_stub.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
func (c *genericOpt) TOS() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *genericOpt) SetTOS(tos int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *genericOpt) TTL() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *genericOpt) SetTTL(ttl int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
163
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/header.go
generated
vendored
163
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/header.go
generated
vendored
@@ -1,163 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"runtime"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errMissingAddress = errors.New("missing address")
|
|
||||||
errMissingHeader = errors.New("missing header")
|
|
||||||
errHeaderTooShort = errors.New("header too short")
|
|
||||||
errBufferTooShort = errors.New("buffer too short")
|
|
||||||
errInvalidConnType = errors.New("invalid conn type")
|
|
||||||
)
|
|
||||||
|
|
||||||
// References:
|
|
||||||
//
|
|
||||||
// RFC 791 Internet Protocol
|
|
||||||
// http://tools.ietf.org/html/rfc791
|
|
||||||
// RFC 1112 Host Extensions for IP Multicasting
|
|
||||||
// http://tools.ietf.org/html/rfc1112
|
|
||||||
// RFC 1122 Requirements for Internet Hosts
|
|
||||||
// http://tools.ietf.org/html/rfc1122
|
|
||||||
|
|
||||||
const (
|
|
||||||
Version = 4 // protocol version
|
|
||||||
HeaderLen = 20 // header length without extension headers
|
|
||||||
maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
posTOS = 1 // type-of-service
|
|
||||||
posTotalLen = 2 // packet total length
|
|
||||||
posID = 4 // identification
|
|
||||||
posFragOff = 6 // fragment offset
|
|
||||||
posTTL = 8 // time-to-live
|
|
||||||
posProtocol = 9 // next protocol
|
|
||||||
posChecksum = 10 // checksum
|
|
||||||
posSrc = 12 // source address
|
|
||||||
posDst = 16 // destination address
|
|
||||||
)
|
|
||||||
|
|
||||||
type HeaderFlags int
|
|
||||||
|
|
||||||
const (
|
|
||||||
MoreFragments HeaderFlags = 1 << iota // more fragments flag
|
|
||||||
DontFragment // don't fragment flag
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Header represents an IPv4 header.
|
|
||||||
type Header struct {
|
|
||||||
Version int // protocol version
|
|
||||||
Len int // header length
|
|
||||||
TOS int // type-of-service
|
|
||||||
TotalLen int // packet total length
|
|
||||||
ID int // identification
|
|
||||||
Flags HeaderFlags // flags
|
|
||||||
FragOff int // fragment offset
|
|
||||||
TTL int // time-to-live
|
|
||||||
Protocol int // next protocol
|
|
||||||
Checksum int // checksum
|
|
||||||
Src net.IP // source address
|
|
||||||
Dst net.IP // destination address
|
|
||||||
Options []byte // options, extension headers
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Header) String() string {
|
|
||||||
if h == nil {
|
|
||||||
return "<nil>"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("ver: %v, hdrlen: %v, tos: %#x, totallen: %v, id: %#x, flags: %#x, fragoff: %#x, ttl: %v, proto: %v, cksum: %#x, src: %v, dst: %v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Please refer to the online manual; IP(4) on Darwin, FreeBSD and
|
|
||||||
// OpenBSD. IP(7) on Linux.
|
|
||||||
const supportsNewIPInput = runtime.GOOS == "linux" || runtime.GOOS == "openbsd"
|
|
||||||
|
|
||||||
// Marshal returns the binary encoding of the IPv4 header h.
|
|
||||||
func (h *Header) Marshal() ([]byte, error) {
|
|
||||||
if h == nil {
|
|
||||||
return nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
if h.Len < HeaderLen {
|
|
||||||
return nil, errHeaderTooShort
|
|
||||||
}
|
|
||||||
hdrlen := HeaderLen + len(h.Options)
|
|
||||||
b := make([]byte, hdrlen)
|
|
||||||
b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f))
|
|
||||||
b[posTOS] = byte(h.TOS)
|
|
||||||
flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13)
|
|
||||||
if supportsNewIPInput {
|
|
||||||
b[posTotalLen], b[posTotalLen+1] = byte(h.TotalLen>>8), byte(h.TotalLen)
|
|
||||||
b[posFragOff], b[posFragOff+1] = byte(flagsAndFragOff>>8), byte(flagsAndFragOff)
|
|
||||||
} else {
|
|
||||||
*(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])) = uint16(h.TotalLen)
|
|
||||||
*(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])) = uint16(flagsAndFragOff)
|
|
||||||
}
|
|
||||||
b[posID], b[posID+1] = byte(h.ID>>8), byte(h.ID)
|
|
||||||
b[posTTL] = byte(h.TTL)
|
|
||||||
b[posProtocol] = byte(h.Protocol)
|
|
||||||
b[posChecksum], b[posChecksum+1] = byte(h.Checksum>>8), byte(h.Checksum)
|
|
||||||
if ip := h.Src.To4(); ip != nil {
|
|
||||||
copy(b[posSrc:posSrc+net.IPv4len], ip[:net.IPv4len])
|
|
||||||
}
|
|
||||||
if ip := h.Dst.To4(); ip != nil {
|
|
||||||
copy(b[posDst:posDst+net.IPv4len], ip[:net.IPv4len])
|
|
||||||
} else {
|
|
||||||
return nil, errMissingAddress
|
|
||||||
}
|
|
||||||
if len(h.Options) > 0 {
|
|
||||||
copy(b[HeaderLen:], h.Options)
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
|
|
||||||
var freebsdVersion uint32
|
|
||||||
|
|
||||||
// ParseHeader parses b as an IPv4 header.
|
|
||||||
func ParseHeader(b []byte) (*Header, error) {
|
|
||||||
if len(b) < HeaderLen {
|
|
||||||
return nil, errHeaderTooShort
|
|
||||||
}
|
|
||||||
hdrlen := int(b[0]&0x0f) << 2
|
|
||||||
if hdrlen > len(b) {
|
|
||||||
return nil, errBufferTooShort
|
|
||||||
}
|
|
||||||
h := &Header{}
|
|
||||||
h.Version = int(b[0] >> 4)
|
|
||||||
h.Len = hdrlen
|
|
||||||
h.TOS = int(b[posTOS])
|
|
||||||
if supportsNewIPInput {
|
|
||||||
h.TotalLen = int(b[posTotalLen])<<8 | int(b[posTotalLen+1])
|
|
||||||
h.FragOff = int(b[posFragOff])<<8 | int(b[posFragOff+1])
|
|
||||||
} else {
|
|
||||||
h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])))
|
|
||||||
if runtime.GOOS != "freebsd" || freebsdVersion < 1000000 {
|
|
||||||
h.TotalLen += hdrlen
|
|
||||||
}
|
|
||||||
h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])))
|
|
||||||
}
|
|
||||||
h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13
|
|
||||||
h.FragOff = h.FragOff & 0x1fff
|
|
||||||
h.ID = int(b[posID])<<8 | int(b[posID+1])
|
|
||||||
h.TTL = int(b[posTTL])
|
|
||||||
h.Protocol = int(b[posProtocol])
|
|
||||||
h.Checksum = int(b[posChecksum])<<8 | int(b[posChecksum+1])
|
|
||||||
h.Src = net.IPv4(b[posSrc], b[posSrc+1], b[posSrc+2], b[posSrc+3])
|
|
||||||
h.Dst = net.IPv4(b[posDst], b[posDst+1], b[posDst+2], b[posDst+3])
|
|
||||||
if hdrlen-HeaderLen > 0 {
|
|
||||||
h.Options = make([]byte, hdrlen-HeaderLen)
|
|
||||||
copy(h.Options, b[HeaderLen:])
|
|
||||||
}
|
|
||||||
return h, nil
|
|
||||||
}
|
|
||||||
104
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/header_test.go
generated
vendored
104
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/header_test.go
generated
vendored
@@ -1,104 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"net"
|
|
||||||
"reflect"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
wireHeaderFromKernel = [HeaderLen]byte{
|
|
||||||
0x45, 0x01, 0xbe, 0xef,
|
|
||||||
0xca, 0xfe, 0x45, 0xdc,
|
|
||||||
0xff, 0x01, 0xde, 0xad,
|
|
||||||
172, 16, 254, 254,
|
|
||||||
192, 168, 0, 1,
|
|
||||||
}
|
|
||||||
wireHeaderToKernel = [HeaderLen]byte{
|
|
||||||
0x45, 0x01, 0xbe, 0xef,
|
|
||||||
0xca, 0xfe, 0x45, 0xdc,
|
|
||||||
0xff, 0x01, 0xde, 0xad,
|
|
||||||
172, 16, 254, 254,
|
|
||||||
192, 168, 0, 1,
|
|
||||||
}
|
|
||||||
wireHeaderFromTradBSDKernel = [HeaderLen]byte{
|
|
||||||
0x45, 0x01, 0xdb, 0xbe,
|
|
||||||
0xca, 0xfe, 0xdc, 0x45,
|
|
||||||
0xff, 0x01, 0xde, 0xad,
|
|
||||||
172, 16, 254, 254,
|
|
||||||
192, 168, 0, 1,
|
|
||||||
}
|
|
||||||
wireHeaderFromFreeBSD10Kernel = [HeaderLen]byte{
|
|
||||||
0x45, 0x01, 0xef, 0xbe,
|
|
||||||
0xca, 0xfe, 0xdc, 0x45,
|
|
||||||
0xff, 0x01, 0xde, 0xad,
|
|
||||||
172, 16, 254, 254,
|
|
||||||
192, 168, 0, 1,
|
|
||||||
}
|
|
||||||
wireHeaderToTradBSDKernel = [HeaderLen]byte{
|
|
||||||
0x45, 0x01, 0xef, 0xbe,
|
|
||||||
0xca, 0xfe, 0xdc, 0x45,
|
|
||||||
0xff, 0x01, 0xde, 0xad,
|
|
||||||
172, 16, 254, 254,
|
|
||||||
192, 168, 0, 1,
|
|
||||||
}
|
|
||||||
// TODO(mikio): Add platform dependent wire header formats when
|
|
||||||
// we support new platforms.
|
|
||||||
|
|
||||||
testHeader = &Header{
|
|
||||||
Version: Version,
|
|
||||||
Len: HeaderLen,
|
|
||||||
TOS: 1,
|
|
||||||
TotalLen: 0xbeef,
|
|
||||||
ID: 0xcafe,
|
|
||||||
Flags: DontFragment,
|
|
||||||
FragOff: 1500,
|
|
||||||
TTL: 255,
|
|
||||||
Protocol: 1,
|
|
||||||
Checksum: 0xdead,
|
|
||||||
Src: net.IPv4(172, 16, 254, 254),
|
|
||||||
Dst: net.IPv4(192, 168, 0, 1),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestMarshalHeader(t *testing.T) {
|
|
||||||
b, err := testHeader.Marshal()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.Header.Marshal failed: %v", err)
|
|
||||||
}
|
|
||||||
var wh []byte
|
|
||||||
if supportsNewIPInput {
|
|
||||||
wh = wireHeaderToKernel[:]
|
|
||||||
} else {
|
|
||||||
wh = wireHeaderToTradBSDKernel[:]
|
|
||||||
}
|
|
||||||
if !bytes.Equal(b, wh) {
|
|
||||||
t.Fatalf("ipv4.Header.Marshal failed: %#v not equal %#v", b, wh)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParseHeader(t *testing.T) {
|
|
||||||
var wh []byte
|
|
||||||
if supportsNewIPInput {
|
|
||||||
wh = wireHeaderFromKernel[:]
|
|
||||||
} else {
|
|
||||||
if runtime.GOOS == "freebsd" && freebsdVersion >= 1000000 {
|
|
||||||
wh = wireHeaderFromFreeBSD10Kernel[:]
|
|
||||||
} else {
|
|
||||||
wh = wireHeaderFromTradBSDKernel[:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
h, err := ParseHeader(wh)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.ParseHeader failed: %v", err)
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(h, testHeader) {
|
|
||||||
t.Fatalf("ipv4.ParseHeader failed: %#v not equal %#v", h, testHeader)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper.go
generated
vendored
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper.go
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"net"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errOpNoSupport = errors.New("operation not supported")
|
|
||||||
errNoSuchInterface = errors.New("no such interface")
|
|
||||||
errNoSuchMulticastInterface = errors.New("no such multicast interface")
|
|
||||||
)
|
|
||||||
|
|
||||||
func boolint(b bool) int {
|
|
||||||
if b {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func netAddrToIP4(a net.Addr) net.IP {
|
|
||||||
switch v := a.(type) {
|
|
||||||
case *net.UDPAddr:
|
|
||||||
if ip := v.IP.To4(); ip != nil {
|
|
||||||
return ip
|
|
||||||
}
|
|
||||||
case *net.IPAddr:
|
|
||||||
if ip := v.IP.To4(); ip != nil {
|
|
||||||
return ip
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_stub.go
generated
vendored
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_stub.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
func (c *genericOpt) sysfd() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) sysfd() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *payloadHandler) sysfd() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *packetHandler) sysfd() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
50
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_unix.go
generated
vendored
50
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_unix.go
generated
vendored
@@ -1,50 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *genericOpt) sysfd() (int, error) {
|
|
||||||
switch p := c.Conn.(type) {
|
|
||||||
case *net.TCPConn, *net.UDPConn, *net.IPConn:
|
|
||||||
return sysfd(p)
|
|
||||||
}
|
|
||||||
return 0, errInvalidConnType
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) sysfd() (int, error) {
|
|
||||||
switch p := c.PacketConn.(type) {
|
|
||||||
case *net.UDPConn, *net.IPConn:
|
|
||||||
return sysfd(p.(net.Conn))
|
|
||||||
}
|
|
||||||
return 0, errInvalidConnType
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *payloadHandler) sysfd() (int, error) {
|
|
||||||
return sysfd(c.PacketConn.(net.Conn))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *packetHandler) sysfd() (int, error) {
|
|
||||||
return sysfd(c.c)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysfd(c net.Conn) (int, error) {
|
|
||||||
cv := reflect.ValueOf(c)
|
|
||||||
switch ce := cv.Elem(); ce.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
netfd := ce.FieldByName("conn").FieldByName("fd")
|
|
||||||
switch fe := netfd.Elem(); fe.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
fd := fe.FieldByName("sysfd")
|
|
||||||
return int(fd.Int()), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, errInvalidConnType
|
|
||||||
}
|
|
||||||
49
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_windows.go
generated
vendored
49
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/helper_windows.go
generated
vendored
@@ -1,49 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"reflect"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *genericOpt) sysfd() (syscall.Handle, error) {
|
|
||||||
switch p := c.Conn.(type) {
|
|
||||||
case *net.TCPConn, *net.UDPConn, *net.IPConn:
|
|
||||||
return sysfd(p)
|
|
||||||
}
|
|
||||||
return syscall.InvalidHandle, errInvalidConnType
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) sysfd() (syscall.Handle, error) {
|
|
||||||
switch p := c.PacketConn.(type) {
|
|
||||||
case *net.UDPConn, *net.IPConn:
|
|
||||||
return sysfd(p.(net.Conn))
|
|
||||||
}
|
|
||||||
return syscall.InvalidHandle, errInvalidConnType
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *payloadHandler) sysfd() (syscall.Handle, error) {
|
|
||||||
return sysfd(c.PacketConn.(net.Conn))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *packetHandler) sysfd() (syscall.Handle, error) {
|
|
||||||
return sysfd(c.c)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysfd(c net.Conn) (syscall.Handle, error) {
|
|
||||||
cv := reflect.ValueOf(c)
|
|
||||||
switch ce := cv.Elem(); ce.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
netfd := ce.FieldByName("conn").FieldByName("fd")
|
|
||||||
switch fe := netfd.Elem(); fe.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
fd := fe.FieldByName("sysfd")
|
|
||||||
return syscall.Handle(fd.Uint()), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return syscall.InvalidHandle, errInvalidConnType
|
|
||||||
}
|
|
||||||
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/iana.go
generated
vendored
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/iana.go
generated
vendored
@@ -1,34 +0,0 @@
|
|||||||
// go generate gen.go
|
|
||||||
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19
|
|
||||||
const (
|
|
||||||
ICMPTypeEchoReply ICMPType = 0 // Echo Reply
|
|
||||||
ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable
|
|
||||||
ICMPTypeRedirect ICMPType = 5 // Redirect
|
|
||||||
ICMPTypeEcho ICMPType = 8 // Echo
|
|
||||||
ICMPTypeRouterAdvertisement ICMPType = 9 // Router Advertisement
|
|
||||||
ICMPTypeRouterSolicitation ICMPType = 10 // Router Solicitation
|
|
||||||
ICMPTypeTimeExceeded ICMPType = 11 // Time Exceeded
|
|
||||||
ICMPTypeParameterProblem ICMPType = 12 // Parameter Problem
|
|
||||||
ICMPTypeTimestamp ICMPType = 13 // Timestamp
|
|
||||||
ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply
|
|
||||||
ICMPTypePhoturis ICMPType = 40 // Photuris
|
|
||||||
)
|
|
||||||
|
|
||||||
// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19
|
|
||||||
var icmpTypes = map[ICMPType]string{
|
|
||||||
0: "echo reply",
|
|
||||||
3: "destination unreachable",
|
|
||||||
5: "redirect",
|
|
||||||
8: "echo",
|
|
||||||
9: "router advertisement",
|
|
||||||
10: "router solicitation",
|
|
||||||
11: "time exceeded",
|
|
||||||
12: "parameter problem",
|
|
||||||
13: "timestamp",
|
|
||||||
14: "timestamp reply",
|
|
||||||
40: "photuris",
|
|
||||||
}
|
|
||||||
16
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/icmp.go
generated
vendored
16
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/icmp.go
generated
vendored
@@ -1,16 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
// An ICMPType represents a type of ICMP message.
|
|
||||||
type ICMPType int
|
|
||||||
|
|
||||||
func (typ ICMPType) String() string {
|
|
||||||
s, ok := icmpTypes[typ]
|
|
||||||
if !ok {
|
|
||||||
return "<nil>"
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
21
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/mocktransponder_test.go
generated
vendored
21
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/mocktransponder_test.go
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
|
|
||||||
defer func() { done <- true }()
|
|
||||||
|
|
||||||
c, err := ln.Accept()
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("net.Listener.Accept failed: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.Close()
|
|
||||||
}
|
|
||||||
267
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicast_test.go
generated
vendored
267
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicast_test.go
generated
vendored
@@ -1,267 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
"github.com/hashicorp/go.net/internal/icmp"
|
|
||||||
"github.com/hashicorp/go.net/internal/nettest"
|
|
||||||
"github.com/hashicorp/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("udp4", "224.0.0.0:0") // see RFC 4727
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
_, port, err := net.SplitHostPort(c.LocalAddr().String())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.SplitHostPort failed: %v", err)
|
|
||||||
}
|
|
||||||
dst, err := net.ResolveUDPAddr("udp4", "224.0.0.254:"+port) // see RFC 4727
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ResolveUDPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
defer p.Close()
|
|
||||||
if err := p.JoinGroup(ifi, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
if err := p.SetMulticastInterface(ifi); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.MulticastInterface(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetMulticastLoopback(true); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.MulticastLoopback(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
if err := p.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
p.SetMulticastTTL(i + 1)
|
|
||||||
if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), nil, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
b := make([]byte, 128)
|
|
||||||
if _, cm, _, err := p.ReadFrom(b); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ResolveIPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
defer p.Close()
|
|
||||||
if err := p.JoinGroup(ifi, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
if err := p.SetMulticastInterface(ifi); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.MulticastInterface(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetMulticastLoopback(true); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.MulticastLoopback(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
wb, err := (&icmp.Message{
|
|
||||||
Type: ipv4.ICMPTypeEcho, Code: 0,
|
|
||||||
Body: &icmp.Echo{
|
|
||||||
ID: os.Getpid() & 0xffff, Seq: i + 1,
|
|
||||||
Data: []byte("HELLO-R-U-THERE"),
|
|
||||||
},
|
|
||||||
}).Marshal(nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.Message.Marshal failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
p.SetMulticastTTL(i + 1)
|
|
||||||
if _, err := p.WriteTo(wb, nil, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
b := make([]byte, 128)
|
|
||||||
if n, cm, _, err := p.ReadFrom(b); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
m, err := icmp.ParseMessage(iana.ProtocolICMP, b[:n])
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.ParseMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
|
|
||||||
case m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
|
|
||||||
default:
|
|
||||||
t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRawConnReadWriteMulticastICMP(t *testing.T) {
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ResolveIPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
defer r.Close()
|
|
||||||
if err := r.JoinGroup(ifi, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
if err := r.SetMulticastInterface(ifi); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.SetMulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := r.MulticastInterface(); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.MulticastInterface failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := r.SetMulticastLoopback(true); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.SetMulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := r.MulticastLoopback(); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.MulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
wb, err := (&icmp.Message{
|
|
||||||
Type: ipv4.ICMPTypeEcho, Code: 0,
|
|
||||||
Body: &icmp.Echo{
|
|
||||||
ID: os.Getpid() & 0xffff, Seq: i + 1,
|
|
||||||
Data: []byte("HELLO-R-U-THERE"),
|
|
||||||
},
|
|
||||||
}).Marshal(nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.Message.Marshal failed: %v", err)
|
|
||||||
}
|
|
||||||
wh := &ipv4.Header{
|
|
||||||
Version: ipv4.Version,
|
|
||||||
Len: ipv4.HeaderLen,
|
|
||||||
TOS: i + 1,
|
|
||||||
TotalLen: ipv4.HeaderLen + len(wb),
|
|
||||||
Protocol: 1,
|
|
||||||
Dst: dst.IP,
|
|
||||||
}
|
|
||||||
if err := r.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := r.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.SetDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
r.SetMulticastTTL(i + 1)
|
|
||||||
if err := r.WriteTo(wh, wb, nil); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
rb := make([]byte, ipv4.HeaderLen+128)
|
|
||||||
if rh, b, cm, err := r.ReadFrom(rb); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.ParseMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case (rh.Dst.IsLoopback() || rh.Dst.IsLinkLocalUnicast() || rh.Dst.IsGlobalUnicast()) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
|
|
||||||
case rh.Dst.IsMulticast() && m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
|
|
||||||
default:
|
|
||||||
t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
250
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicastlistener_test.go
generated
vendored
250
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicastlistener_test.go
generated
vendored
@@ -1,250 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"code.google.com/p/go.net/internal/nettest"
|
|
||||||
"code.google.com/p/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
var udpMultipleGroupListenerTests = []net.Addr{
|
|
||||||
&net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}, // see RFC 4727
|
|
||||||
&net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)},
|
|
||||||
&net.UDPAddr{IP: net.IPv4(224, 0, 0, 254)},
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, gaddr := range udpMultipleGroupListenerTests {
|
|
||||||
c, err := net.ListenPacket("udp4", "0.0.0.0:0") // wildcard address with no reusable port
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
var mift []*net.Interface
|
|
||||||
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Interfaces failed: %v", err)
|
|
||||||
}
|
|
||||||
for i, ifi := range ift {
|
|
||||||
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := p.JoinGroup(&ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
|
|
||||||
}
|
|
||||||
mift = append(mift, &ift[i])
|
|
||||||
}
|
|
||||||
for _, ifi := range mift {
|
|
||||||
if err := p.LeaveGroup(ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, gaddr := range udpMultipleGroupListenerTests {
|
|
||||||
c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c1.Close()
|
|
||||||
|
|
||||||
c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c2.Close()
|
|
||||||
|
|
||||||
var ps [2]*ipv4.PacketConn
|
|
||||||
ps[0] = ipv4.NewPacketConn(c1)
|
|
||||||
ps[1] = ipv4.NewPacketConn(c2)
|
|
||||||
var mift []*net.Interface
|
|
||||||
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Interfaces failed: %v", err)
|
|
||||||
}
|
|
||||||
for i, ifi := range ift {
|
|
||||||
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, p := range ps {
|
|
||||||
if err := p.JoinGroup(&ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mift = append(mift, &ift[i])
|
|
||||||
}
|
|
||||||
for _, ifi := range mift {
|
|
||||||
for _, p := range ps {
|
|
||||||
if err := p.LeaveGroup(ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
|
|
||||||
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
|
|
||||||
type ml struct {
|
|
||||||
c *ipv4.PacketConn
|
|
||||||
ifi *net.Interface
|
|
||||||
}
|
|
||||||
var mlt []*ml
|
|
||||||
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Interfaces failed: %v", err)
|
|
||||||
}
|
|
||||||
for i, ifi := range ift {
|
|
||||||
ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c, err := net.ListenPacket("udp4", ip.String()+":"+"1024") // unicast address with non-reusable port
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
if err := p.JoinGroup(&ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
mlt = append(mlt, &ml{p, &ift[i]})
|
|
||||||
}
|
|
||||||
for _, m := range mlt {
|
|
||||||
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") // wildcard address
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
|
|
||||||
var mift []*net.Interface
|
|
||||||
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Interfaces failed: %v", err)
|
|
||||||
}
|
|
||||||
for i, ifi := range ift {
|
|
||||||
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := r.JoinGroup(&ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
mift = append(mift, &ift[i])
|
|
||||||
}
|
|
||||||
for _, ifi := range mift {
|
|
||||||
if err := r.LeaveGroup(ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if testing.Short() {
|
|
||||||
t.Skip("to avoid external network")
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
|
|
||||||
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
|
|
||||||
type ml struct {
|
|
||||||
c *ipv4.RawConn
|
|
||||||
ifi *net.Interface
|
|
||||||
}
|
|
||||||
var mlt []*ml
|
|
||||||
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Interfaces failed: %v", err)
|
|
||||||
}
|
|
||||||
for i, ifi := range ift {
|
|
||||||
ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c, err := net.ListenPacket("ip4:253", ip.String()) // unicast address
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := r.JoinGroup(&ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
|
|
||||||
}
|
|
||||||
mlt = append(mlt, &ml{r, &ift[i]})
|
|
||||||
}
|
|
||||||
for _, m := range mlt {
|
|
||||||
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", m.ifi, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
113
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicastsockopt_test.go
generated
vendored
113
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/multicastsockopt_test.go
generated
vendored
@@ -1,113 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"code.google.com/p/go.net/internal/nettest"
|
|
||||||
"code.google.com/p/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
var packetConnMulticastSocketOptionTests = []struct {
|
|
||||||
net, proto, addr string
|
|
||||||
gaddr net.Addr
|
|
||||||
}{
|
|
||||||
{"udp4", "", "224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}}, // see RFC 4727
|
|
||||||
{"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}}, // see RFC 4727
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPacketConnMulticastSocketOptions(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range packetConnMulticastSocketOptionTests {
|
|
||||||
if tt.net == "ip4" && os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
testMulticastSocketOptions(t, ipv4.NewPacketConn(c), ifi, tt.gaddr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRawConnMulticastSocketOptions(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
testMulticastSocketOptions(t, r, ifi, &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}) /// see RFC 4727
|
|
||||||
}
|
|
||||||
|
|
||||||
type testIPv4MulticastConn interface {
|
|
||||||
MulticastTTL() (int, error)
|
|
||||||
SetMulticastTTL(ttl int) error
|
|
||||||
MulticastLoopback() (bool, error)
|
|
||||||
SetMulticastLoopback(bool) error
|
|
||||||
JoinGroup(*net.Interface, net.Addr) error
|
|
||||||
LeaveGroup(*net.Interface, net.Addr) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func testMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, gaddr net.Addr) {
|
|
||||||
const ttl = 255
|
|
||||||
if err := c.SetMulticastTTL(ttl); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastTTL failed: %v", err)
|
|
||||||
}
|
|
||||||
if v, err := c.MulticastTTL(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastTTL failed: %v", err)
|
|
||||||
} else if v != ttl {
|
|
||||||
t.Fatalf("got unexpected multicast TTL value %v; expected %v", v, ttl)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, toggle := range []bool{true, false} {
|
|
||||||
if err := c.SetMulticastLoopback(toggle); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
|
|
||||||
}
|
|
||||||
if v, err := c.MulticastLoopback(); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
|
|
||||||
} else if v != toggle {
|
|
||||||
t.Fatalf("got unexpected multicast loopback %v; expected %v", v, toggle)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.JoinGroup(ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.JoinGroup(%v, %v) failed: %v", ifi, gaddr, err)
|
|
||||||
}
|
|
||||||
if err := c.LeaveGroup(ifi, gaddr); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.LeaveGroup(%v, %v) failed: %v", ifi, gaddr, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
97
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/packet.go
generated
vendored
97
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/packet.go
generated
vendored
@@ -1,97 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A packetHandler represents the IPv4 datagram handler.
|
|
||||||
type packetHandler struct {
|
|
||||||
c *net.IPConn
|
|
||||||
rawOpt
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *packetHandler) ok() bool { return c != nil && c.c != nil }
|
|
||||||
|
|
||||||
// ReadFrom reads an IPv4 datagram from the endpoint c, copying the
|
|
||||||
// datagram into b. It returns the received datagram as the IPv4
|
|
||||||
// header h, the payload p and the control message cm.
|
|
||||||
func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return nil, nil, nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
oob := newControlMessage(&c.rawOpt)
|
|
||||||
n, oobn, _, src, err := c.c.ReadMsgIP(b, oob)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
|
||||||
var hs []byte
|
|
||||||
if hs, p, err = slicePacket(b[:n]); err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
|
||||||
if h, err = ParseHeader(hs); err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
|
||||||
if cm, err = parseControlMessage(oob[:oobn]); err != nil {
|
|
||||||
return nil, nil, nil, err
|
|
||||||
}
|
|
||||||
if src != nil && cm != nil {
|
|
||||||
cm.Src = src.IP
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func slicePacket(b []byte) (h, p []byte, err error) {
|
|
||||||
if len(b) < HeaderLen {
|
|
||||||
return nil, nil, errHeaderTooShort
|
|
||||||
}
|
|
||||||
hdrlen := int(b[0]&0x0f) << 2
|
|
||||||
return b[:hdrlen], b[hdrlen:], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteTo writes an IPv4 datagram through the endpoint c, copying the
|
|
||||||
// datagram from the IPv4 header h and the payload p. The control
|
|
||||||
// message cm allows the datagram path and the outgoing interface to be
|
|
||||||
// specified. Currently only Darwin and Linux support this. The cm
|
|
||||||
// may be nil if control of the outgoing datagram is not required.
|
|
||||||
//
|
|
||||||
// The IPv4 header h must contain appropriate fields that include:
|
|
||||||
//
|
|
||||||
// Version = ipv4.Version
|
|
||||||
// Len = <must be specified>
|
|
||||||
// TOS = <must be specified>
|
|
||||||
// TotalLen = <must be specified>
|
|
||||||
// ID = platform sets an appropriate value if ID is zero
|
|
||||||
// FragOff = <must be specified>
|
|
||||||
// TTL = <must be specified>
|
|
||||||
// Protocol = <must be specified>
|
|
||||||
// Checksum = platform sets an appropriate value if Checksum is zero
|
|
||||||
// Src = platform sets an appropriate value if Src is nil
|
|
||||||
// Dst = <must be specified>
|
|
||||||
// Options = optional
|
|
||||||
func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
oob := marshalControlMessage(cm)
|
|
||||||
wh, err := h.Marshal()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
dst := &net.IPAddr{}
|
|
||||||
if cm != nil {
|
|
||||||
if ip := cm.Dst.To4(); ip != nil {
|
|
||||||
dst.IP = ip
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if dst.IP == nil {
|
|
||||||
dst.IP = h.Dst
|
|
||||||
}
|
|
||||||
wh = append(wh, p...)
|
|
||||||
_, _, err = c.c.WriteMsgIP(wh, oob, dst)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
15
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload.go
generated
vendored
15
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload.go
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
// A payloadHandler represents the IPv4 datagram payload handler.
|
|
||||||
type payloadHandler struct {
|
|
||||||
net.PacketConn
|
|
||||||
rawOpt
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil }
|
|
||||||
75
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload_cmsg.go
generated
vendored
75
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload_cmsg.go
generated
vendored
@@ -1,75 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !plan9,!solaris,!windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ReadFrom reads a payload of the received IPv4 datagram, from the
|
|
||||||
// endpoint c, copying the payload into b. It returns the number of
|
|
||||||
// bytes copied into b, the control message cm and the source address
|
|
||||||
// src of the received datagram.
|
|
||||||
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, nil, nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
oob := newControlMessage(&c.rawOpt)
|
|
||||||
var oobn int
|
|
||||||
switch c := c.PacketConn.(type) {
|
|
||||||
case *net.UDPConn:
|
|
||||||
if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
|
|
||||||
return 0, nil, nil, err
|
|
||||||
}
|
|
||||||
case *net.IPConn:
|
|
||||||
nb := make([]byte, maxHeaderLen+len(b))
|
|
||||||
if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
|
|
||||||
return 0, nil, nil, err
|
|
||||||
}
|
|
||||||
hdrlen := int(nb[0]&0x0f) << 2
|
|
||||||
copy(b, nb[hdrlen:])
|
|
||||||
n -= hdrlen
|
|
||||||
default:
|
|
||||||
return 0, nil, nil, errInvalidConnType
|
|
||||||
}
|
|
||||||
if cm, err = parseControlMessage(oob[:oobn]); err != nil {
|
|
||||||
return 0, nil, nil, err
|
|
||||||
}
|
|
||||||
if cm != nil {
|
|
||||||
cm.Src = netAddrToIP4(src)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteTo writes a payload of the IPv4 datagram, to the destination
|
|
||||||
// address dst through the endpoint c, copying the payload from b. It
|
|
||||||
// returns the number of bytes written. The control message cm allows
|
|
||||||
// the datagram path and the outgoing interface to be specified.
|
|
||||||
// Currently only Darwin and Darwin support this. The cm may be nil if
|
|
||||||
// control of the outgoing datagram is not required.
|
|
||||||
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
oob := marshalControlMessage(cm)
|
|
||||||
if dst == nil {
|
|
||||||
return 0, errMissingAddress
|
|
||||||
}
|
|
||||||
switch c := c.PacketConn.(type) {
|
|
||||||
case *net.UDPConn:
|
|
||||||
n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
|
|
||||||
case *net.IPConn:
|
|
||||||
n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
|
|
||||||
default:
|
|
||||||
return 0, errInvalidConnType
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
42
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload_nocmsg.go
generated
vendored
42
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/payload_nocmsg.go
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build plan9 solaris windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ReadFrom reads a payload of the received IPv4 datagram, from the
|
|
||||||
// endpoint c, copying the payload into b. It returns the number of
|
|
||||||
// bytes copied into b, the control message cm and the source address
|
|
||||||
// src of the received datagram.
|
|
||||||
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, nil, nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
if n, src, err = c.PacketConn.ReadFrom(b); err != nil {
|
|
||||||
return 0, nil, nil, err
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteTo writes a payload of the IPv4 datagram, to the destination
|
|
||||||
// address dst through the endpoint c, copying the payload from b. It
|
|
||||||
// returns the number of bytes written. The control message cm allows
|
|
||||||
// the datagram path and the outgoing interface to be specified.
|
|
||||||
// Currently only Darwin and Linux support this. The cm may be nil if
|
|
||||||
// control of the outgoing datagram is not required.
|
|
||||||
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
if dst == nil {
|
|
||||||
return 0, errMissingAddress
|
|
||||||
}
|
|
||||||
return c.PacketConn.WriteTo(b, dst)
|
|
||||||
}
|
|
||||||
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt.go
generated
vendored
37
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt.go
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
// Sticky socket options
|
|
||||||
const (
|
|
||||||
ssoTOS = iota // header field for unicast packet
|
|
||||||
ssoTTL // header field for unicast packet
|
|
||||||
ssoMulticastTTL // header field for multicast packet
|
|
||||||
ssoMulticastInterface // outbound interface for multicast packet
|
|
||||||
ssoMulticastLoopback // loopback for multicast packet
|
|
||||||
ssoReceiveTTL // header field on received packet
|
|
||||||
ssoReceiveDst // header field on received packet
|
|
||||||
ssoReceiveInterface // inbound interface on received packet
|
|
||||||
ssoPacketInfo // incbound or outbound packet path
|
|
||||||
ssoHeaderPrepend // ipv4 header
|
|
||||||
ssoJoinGroup // any-source multicast
|
|
||||||
ssoLeaveGroup // any-source multicast
|
|
||||||
ssoMax
|
|
||||||
)
|
|
||||||
|
|
||||||
// Sticky socket option value types
|
|
||||||
const (
|
|
||||||
ssoTypeByte = iota + 1
|
|
||||||
ssoTypeInt
|
|
||||||
ssoTypeInterface
|
|
||||||
ssoTypeIPMreq
|
|
||||||
ssoTypeIPMreqn
|
|
||||||
)
|
|
||||||
|
|
||||||
// A sockOpt represents a binding for sticky socket option.
|
|
||||||
type sockOpt struct {
|
|
||||||
name int // option name, must be equal or greater than 1
|
|
||||||
typ int // option value type, must be equal or greater than 1
|
|
||||||
}
|
|
||||||
83
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq.go
generated
vendored
83
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq.go
generated
vendored
@@ -1,83 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd netbsd openbsd windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func setIPMreqInterface(mreq *sysIPMreq, ifi *net.Interface) error {
|
|
||||||
if ifi == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
ifat, err := ifi.Addrs()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for _, ifa := range ifat {
|
|
||||||
switch ifa := ifa.(type) {
|
|
||||||
case *net.IPAddr:
|
|
||||||
if ip := ifa.IP.To4(); ip != nil {
|
|
||||||
copy(mreq.Interface[:], ip)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
case *net.IPNet:
|
|
||||||
if ip := ifa.IP.To4(); ip != nil {
|
|
||||||
copy(mreq.Interface[:], ip)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return errNoSuchInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
func netIP4ToInterface(ip net.IP) (*net.Interface, error) {
|
|
||||||
ift, err := net.Interfaces()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, ifi := range ift {
|
|
||||||
ifat, err := ifi.Addrs()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, ifa := range ifat {
|
|
||||||
switch ifa := ifa.(type) {
|
|
||||||
case *net.IPAddr:
|
|
||||||
if ip.Equal(ifa.IP) {
|
|
||||||
return &ifi, nil
|
|
||||||
}
|
|
||||||
case *net.IPNet:
|
|
||||||
if ip.Equal(ifa.IP) {
|
|
||||||
return &ifi, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, errNoSuchInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
func netInterfaceToIP4(ifi *net.Interface) (net.IP, error) {
|
|
||||||
if ifi == nil {
|
|
||||||
return net.IPv4zero.To4(), nil
|
|
||||||
}
|
|
||||||
ifat, err := ifi.Addrs()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, ifa := range ifat {
|
|
||||||
switch ifa := ifa.(type) {
|
|
||||||
case *net.IPAddr:
|
|
||||||
if ip := ifa.IP.To4(); ip != nil {
|
|
||||||
return ip, nil
|
|
||||||
}
|
|
||||||
case *net.IPNet:
|
|
||||||
if ip := ifa.IP.To4(); ip != nil {
|
|
||||||
return ip, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, errNoSuchInterface
|
|
||||||
}
|
|
||||||
21
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq_stub.go
generated
vendored
21
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq_stub.go
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func setsockoptIPMreq(fd, name int, ifi *net.Interface, grp net.IP) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func getsockoptInterface(fd, name int) (*net.Interface, error) {
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockoptInterface(fd, name int, ifi *net.Interface) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
46
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq_unix.go
generated
vendored
46
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreq_unix.go
generated
vendored
@@ -1,46 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func setsockoptIPMreq(fd, name int, ifi *net.Interface, grp net.IP) error {
|
|
||||||
mreq := sysIPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
|
|
||||||
if err := setIPMreqInterface(&mreq, ifi); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&mreq), sysSizeofIPMreq))
|
|
||||||
}
|
|
||||||
|
|
||||||
func getsockoptInterface(fd, name int) (*net.Interface, error) {
|
|
||||||
var b [4]byte
|
|
||||||
l := sysSockoptLen(4)
|
|
||||||
if err := getsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), &l); err != nil {
|
|
||||||
return nil, os.NewSyscallError("getsockopt", err)
|
|
||||||
}
|
|
||||||
ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3]))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ifi, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockoptInterface(fd, name int, ifi *net.Interface) error {
|
|
||||||
ip, err := netInterfaceToIP4(ifi)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var b [4]byte
|
|
||||||
copy(b[:], ip)
|
|
||||||
return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), sysSockoptLen(4)))
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func setsockoptIPMreq(fd syscall.Handle, name int, ifi *net.Interface, grp net.IP) error {
|
|
||||||
mreq := sysIPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
|
|
||||||
if err := setIPMreqInterface(&mreq, ifi); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, iana.ProtocolIP, int32(name), (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofIPMreq)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func getsockoptInterface(fd syscall.Handle, name int) (*net.Interface, error) {
|
|
||||||
var b [4]byte
|
|
||||||
l := int32(4)
|
|
||||||
if err := syscall.Getsockopt(fd, iana.ProtocolIP, int32(name), (*byte)(unsafe.Pointer(&b[0])), &l); err != nil {
|
|
||||||
return nil, os.NewSyscallError("getsockopt", err)
|
|
||||||
}
|
|
||||||
ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3]))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ifi, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockoptInterface(fd syscall.Handle, name int, ifi *net.Interface) error {
|
|
||||||
ip, err := netInterfaceToIP4(ifi)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var b [4]byte
|
|
||||||
copy(b[:], ip)
|
|
||||||
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, iana.ProtocolIP, int32(name), (*byte)(unsafe.Pointer(&b[0])), 4))
|
|
||||||
}
|
|
||||||
17
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreqn_stub.go
generated
vendored
17
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreqn_stub.go
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !darwin,!freebsd,!linux,!windows
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func getsockoptIPMreqn(fd, name int) (*net.Interface, error) {
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockoptIPMreqn(fd, name int, ifi *net.Interface, grp net.IP) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
42
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreqn_unix.go
generated
vendored
42
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_asmreqn_unix.go
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin freebsd linux
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getsockoptIPMreqn(fd, name int) (*net.Interface, error) {
|
|
||||||
var mreqn sysIPMreqn
|
|
||||||
l := sysSockoptLen(sysSizeofIPMreqn)
|
|
||||||
if err := getsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), &l); err != nil {
|
|
||||||
return nil, os.NewSyscallError("getsockopt", err)
|
|
||||||
}
|
|
||||||
if mreqn.Ifindex == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
ifi, err := net.InterfaceByIndex(int(mreqn.Ifindex))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ifi, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockoptIPMreqn(fd, name int, ifi *net.Interface, grp net.IP) error {
|
|
||||||
var mreqn sysIPMreqn
|
|
||||||
if ifi != nil {
|
|
||||||
mreqn.Ifindex = int32(ifi.Index)
|
|
||||||
}
|
|
||||||
if grp != nil {
|
|
||||||
mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]}
|
|
||||||
}
|
|
||||||
return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), sysSizeofIPMreqn))
|
|
||||||
}
|
|
||||||
29
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_stub.go
generated
vendored
29
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_stub.go
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
func getInt(fd int, opt *sockOpt) (int, error) {
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInt(fd int, opt *sockOpt, v int) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func getInterface(fd int, opt *sockOpt) (*net.Interface, error) {
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInterface(fd int, opt *sockOpt, ifi *net.Interface) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroup(fd int, opt *sockOpt, ifi *net.Interface, ip net.IP) error {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
94
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_unix.go
generated
vendored
94
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_unix.go
generated
vendored
@@ -1,94 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getInt(fd int, opt *sockOpt) (int, error) {
|
|
||||||
if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) {
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
var i int32
|
|
||||||
var b byte
|
|
||||||
p := unsafe.Pointer(&i)
|
|
||||||
l := sysSockoptLen(4)
|
|
||||||
if opt.typ == ssoTypeByte {
|
|
||||||
p = unsafe.Pointer(&b)
|
|
||||||
l = sysSockoptLen(1)
|
|
||||||
}
|
|
||||||
if err := getsockopt(fd, iana.ProtocolIP, opt.name, p, &l); err != nil {
|
|
||||||
return 0, os.NewSyscallError("getsockopt", err)
|
|
||||||
}
|
|
||||||
if opt.typ == ssoTypeByte {
|
|
||||||
return int(b), nil
|
|
||||||
}
|
|
||||||
return int(i), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInt(fd int, opt *sockOpt, v int) error {
|
|
||||||
if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
i := int32(v)
|
|
||||||
var b byte
|
|
||||||
p := unsafe.Pointer(&i)
|
|
||||||
l := sysSockoptLen(4)
|
|
||||||
if opt.typ == ssoTypeByte {
|
|
||||||
b = byte(v)
|
|
||||||
p = unsafe.Pointer(&b)
|
|
||||||
l = sysSockoptLen(1)
|
|
||||||
}
|
|
||||||
return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, opt.name, p, l))
|
|
||||||
}
|
|
||||||
|
|
||||||
func getInterface(fd int, opt *sockOpt) (*net.Interface, error) {
|
|
||||||
if opt.name < 1 {
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
switch opt.typ {
|
|
||||||
case ssoTypeInterface:
|
|
||||||
return getsockoptInterface(fd, opt.name)
|
|
||||||
case ssoTypeIPMreqn:
|
|
||||||
return getsockoptIPMreqn(fd, opt.name)
|
|
||||||
default:
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInterface(fd int, opt *sockOpt, ifi *net.Interface) error {
|
|
||||||
if opt.name < 1 {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
switch opt.typ {
|
|
||||||
case ssoTypeInterface:
|
|
||||||
return setsockoptInterface(fd, opt.name, ifi)
|
|
||||||
case ssoTypeIPMreqn:
|
|
||||||
return setsockoptIPMreqn(fd, opt.name, ifi, nil)
|
|
||||||
default:
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroup(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
|
|
||||||
if opt.name < 1 {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
switch opt.typ {
|
|
||||||
case ssoTypeIPMreq:
|
|
||||||
return setsockoptIPMreq(fd, opt.name, ifi, grp)
|
|
||||||
case ssoTypeIPMreqn:
|
|
||||||
return setsockoptIPMreqn(fd, opt.name, ifi, grp)
|
|
||||||
default:
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
}
|
|
||||||
55
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_windows.go
generated
vendored
55
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sockopt_windows.go
generated
vendored
@@ -1,55 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getInt(fd syscall.Handle, opt *sockOpt) (int, error) {
|
|
||||||
if opt.name < 1 || opt.typ != ssoTypeInt {
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
var i int32
|
|
||||||
l := int32(4)
|
|
||||||
if err := syscall.Getsockopt(fd, iana.ProtocolIP, int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil {
|
|
||||||
return 0, os.NewSyscallError("getsockopt", err)
|
|
||||||
}
|
|
||||||
return int(i), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInt(fd syscall.Handle, opt *sockOpt, v int) error {
|
|
||||||
if opt.name < 1 || opt.typ != ssoTypeInt {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
i := int32(v)
|
|
||||||
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, iana.ProtocolIP, int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4))
|
|
||||||
}
|
|
||||||
|
|
||||||
func getInterface(fd syscall.Handle, opt *sockOpt) (*net.Interface, error) {
|
|
||||||
if opt.name < 1 || opt.typ != ssoTypeInterface {
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
return getsockoptInterface(fd, opt.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func setInterface(fd syscall.Handle, opt *sockOpt, ifi *net.Interface) error {
|
|
||||||
if opt.name < 1 || opt.typ != ssoTypeInterface {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
return setsockoptInterface(fd, opt.name, ifi)
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
|
|
||||||
if opt.name < 1 || opt.typ != ssoTypeIPMreq {
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
return setsockoptIPMreq(fd, opt.name, ifi, grp)
|
|
||||||
}
|
|
||||||
36
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_bsd.go
generated
vendored
36
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_bsd.go
generated
vendored
@@ -1,36 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build dragonfly netbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{
|
|
||||||
ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
|
|
||||||
ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
|
|
||||||
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
|
|
||||||
}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
|
|
||||||
ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
|
|
||||||
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
|
|
||||||
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
|
|
||||||
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
64
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_darwin.go
generated
vendored
64
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_darwin.go
generated
vendored
@@ -1,64 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{
|
|
||||||
ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
|
|
||||||
ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
|
|
||||||
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
|
|
||||||
}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
|
|
||||||
ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
|
|
||||||
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
|
|
||||||
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
|
|
||||||
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
// Seems like kern.osreldate is veiled on latest OS X. We use
|
|
||||||
// kern.osrelease instead.
|
|
||||||
osver, err := syscall.Sysctl("kern.osrelease")
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var i int
|
|
||||||
for i = range osver {
|
|
||||||
if osver[i] != '.' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// The IP_PKTINFO was introduced in OS X 10.7 (Darwin
|
|
||||||
// 11.0.0). See http://support.apple.com/kb/HT1633.
|
|
||||||
if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '1' {
|
|
||||||
ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO
|
|
||||||
ctlOpts[ctlPacketInfo].length = sysSizeofInetPktinfo
|
|
||||||
ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
|
|
||||||
ctlOpts[ctlPacketInfo].parse = parsePacketInfo
|
|
||||||
sockOpts[ssoPacketInfo].name = sysIP_RECVPKTINFO
|
|
||||||
sockOpts[ssoPacketInfo].typ = ssoTypeInt
|
|
||||||
sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pi *sysInetPktinfo) setIfindex(i int) {
|
|
||||||
pi.Ifindex = uint32(i)
|
|
||||||
}
|
|
||||||
41
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_freebsd.go
generated
vendored
41
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_freebsd.go
generated
vendored
@@ -1,41 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{
|
|
||||||
ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
|
|
||||||
ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
|
|
||||||
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
|
|
||||||
}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
|
|
||||||
ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
|
|
||||||
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
|
|
||||||
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
|
|
||||||
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate")
|
|
||||||
if freebsdVersion >= 1000000 {
|
|
||||||
sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_linux.go
generated
vendored
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_linux.go
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{
|
|
||||||
ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL},
|
|
||||||
ctlPacketInfo: {sysIP_PKTINFO, sysSizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
|
|
||||||
}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
|
|
||||||
ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
|
|
||||||
ssoPacketInfo: {sysIP_PKTINFO, ssoTypeInt},
|
|
||||||
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreqn},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreqn},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (pi *sysInetPktinfo) setIfindex(i int) {
|
|
||||||
pi.Ifindex = int32(i)
|
|
||||||
}
|
|
||||||
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_openbsd.go
generated
vendored
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_openbsd.go
generated
vendored
@@ -1,34 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{
|
|
||||||
ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
|
|
||||||
ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
|
|
||||||
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
|
|
||||||
}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte},
|
|
||||||
ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
|
|
||||||
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
|
|
||||||
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
|
|
||||||
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
15
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_stub.go
generated
vendored
15
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_stub.go
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
type sysSockoptLen int32
|
|
||||||
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{}
|
|
||||||
)
|
|
||||||
61
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_windows.go
generated
vendored
61
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/sys_windows.go
generated
vendored
@@ -1,61 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
// See ws2tcpip.h.
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
sysIP_DONTFRAGMENT = 0xe
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = 0xf
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = 0x10
|
|
||||||
sysIP_PKTINFO = 0x13
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = 0x8
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
sysSizeofIPMreqSource = 0xc
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo struct {
|
|
||||||
Addr [4]byte
|
|
||||||
Ifindex int32
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte
|
|
||||||
Interface [4]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqSource struct {
|
|
||||||
Multiaddr [4]byte
|
|
||||||
Sourceaddr [4]byte
|
|
||||||
Interface [4]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx
|
|
||||||
var (
|
|
||||||
ctlOpts = [ctlMax]ctlOpt{}
|
|
||||||
|
|
||||||
sockOpts = [ssoMax]sockOpt{
|
|
||||||
ssoTOS: {sysIP_TOS, ssoTypeInt},
|
|
||||||
ssoTTL: {sysIP_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
|
|
||||||
ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
|
|
||||||
ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
|
|
||||||
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (pi *sysInetPktinfo) setIfindex(i int) {
|
|
||||||
pi.Ifindex = int32(i)
|
|
||||||
}
|
|
||||||
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/syscall_linux_386.go
generated
vendored
31
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/syscall_linux_386.go
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysGETSOCKOPT = 0xf
|
|
||||||
sysSETSOCKOPT = 0xe
|
|
||||||
)
|
|
||||||
|
|
||||||
func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno)
|
|
||||||
|
|
||||||
func getsockopt(fd, level, name int, v unsafe.Pointer, l *sysSockoptLen) error {
|
|
||||||
if _, errno := socketcall(sysGETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
|
|
||||||
return error(errno)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockopt(fd, level, name int, v unsafe.Pointer, l sysSockoptLen) error {
|
|
||||||
if _, errno := socketcall(sysSETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
|
|
||||||
return error(errno)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
26
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/syscall_unix.go
generated
vendored
26
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/syscall_unix.go
generated
vendored
@@ -1,26 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux,amd64 linux,arm netbsd openbsd
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getsockopt(fd, level, name int, v unsafe.Pointer, l *sysSockoptLen) error {
|
|
||||||
if _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
|
|
||||||
return error(errno)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setsockopt(fd, level, name int, v unsafe.Pointer, l sysSockoptLen) error {
|
|
||||||
if _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
|
|
||||||
return error(errno)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
8
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/thunk_linux_386.s
generated
vendored
8
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/thunk_linux_386.s
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build go1.2
|
|
||||||
|
|
||||||
TEXT ·socketcall(SB),4,$0-36
|
|
||||||
JMP syscall·socketcall(SB)
|
|
||||||
300
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/unicast_test.go
generated
vendored
300
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/unicast_test.go
generated
vendored
@@ -1,300 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
"github.com/hashicorp/go.net/internal/icmp"
|
|
||||||
"github.com/hashicorp/go.net/internal/nettest"
|
|
||||||
"github.com/hashicorp/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
|
|
||||||
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
|
|
||||||
if err != nil {
|
|
||||||
c.Close()
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
return c, dst, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkReadWriteNetUDP(b *testing.B) {
|
|
||||||
c, dst, err := benchmarkUDPListener()
|
|
||||||
if err != nil {
|
|
||||||
b.Fatalf("benchmarkUDPListener failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
benchmarkReadWriteNetUDP(b, c, wb, rb, dst)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
|
|
||||||
if _, err := c.WriteTo(wb, dst); err != nil {
|
|
||||||
b.Fatalf("net.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, _, err := c.ReadFrom(rb); err != nil {
|
|
||||||
b.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkReadWriteIPv4UDP(b *testing.B) {
|
|
||||||
c, dst, err := benchmarkUDPListener()
|
|
||||||
if err != nil {
|
|
||||||
b.Fatalf("benchmarkUDPListener failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
defer p.Close()
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagInterface
|
|
||||||
if err := p.SetControlMessage(cf, true); err != nil {
|
|
||||||
b.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
|
|
||||||
wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
|
|
||||||
cm := ipv4.ControlMessage{TTL: 1}
|
|
||||||
if ifi != nil {
|
|
||||||
cm.IfIndex = ifi.Index
|
|
||||||
}
|
|
||||||
if _, err := p.WriteTo(wb, &cm, dst); err != nil {
|
|
||||||
b.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, _, _, err := p.ReadFrom(rb); err != nil {
|
|
||||||
b.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ResolveUDPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
defer p.Close()
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
if err := p.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
p.SetTTL(i + 1)
|
|
||||||
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetWriteDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), nil, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
rb := make([]byte, 128)
|
|
||||||
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetReadDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, cm, _, err := p.ReadFrom(rb); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ResolveIPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
p := ipv4.NewPacketConn(c)
|
|
||||||
defer p.Close()
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
wb, err := (&icmp.Message{
|
|
||||||
Type: ipv4.ICMPTypeEcho, Code: 0,
|
|
||||||
Body: &icmp.Echo{
|
|
||||||
ID: os.Getpid() & 0xffff, Seq: i + 1,
|
|
||||||
Data: []byte("HELLO-R-U-THERE"),
|
|
||||||
},
|
|
||||||
}).Marshal(nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.Message.Marshal failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := p.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
p.SetTTL(i + 1)
|
|
||||||
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetWriteDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, err := p.WriteTo(wb, nil, dst); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
b := make([]byte, 128)
|
|
||||||
loop:
|
|
||||||
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.SetReadDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if n, cm, _, err := p.ReadFrom(b); err != nil {
|
|
||||||
t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
m, err := icmp.ParseMessage(iana.ProtocolICMP, b[:n])
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.ParseMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
|
|
||||||
// On Linux we must handle own sent packets.
|
|
||||||
goto loop
|
|
||||||
}
|
|
||||||
if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
|
|
||||||
t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRawConnReadWriteUnicastICMP(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris", "windows":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ResolveIPAddr failed: %v", err)
|
|
||||||
}
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
defer r.Close()
|
|
||||||
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
|
|
||||||
|
|
||||||
for i, toggle := range []bool{true, false, true} {
|
|
||||||
wb, err := (&icmp.Message{
|
|
||||||
Type: ipv4.ICMPTypeEcho, Code: 0,
|
|
||||||
Body: &icmp.Echo{
|
|
||||||
ID: os.Getpid() & 0xffff, Seq: i + 1,
|
|
||||||
Data: []byte("HELLO-R-U-THERE"),
|
|
||||||
},
|
|
||||||
}).Marshal(nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.Message.Marshal failed: %v", err)
|
|
||||||
}
|
|
||||||
wh := &ipv4.Header{
|
|
||||||
Version: ipv4.Version,
|
|
||||||
Len: ipv4.HeaderLen,
|
|
||||||
TOS: i + 1,
|
|
||||||
TotalLen: ipv4.HeaderLen + len(wb),
|
|
||||||
TTL: i + 1,
|
|
||||||
Protocol: 1,
|
|
||||||
Dst: dst.IP,
|
|
||||||
}
|
|
||||||
if err := r.SetControlMessage(cf, toggle); err != nil {
|
|
||||||
if protocolNotSupported(err) {
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := r.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.SetWriteDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if err := r.WriteTo(wh, wb, nil); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.WriteTo failed: %v", err)
|
|
||||||
}
|
|
||||||
rb := make([]byte, ipv4.HeaderLen+128)
|
|
||||||
loop:
|
|
||||||
if err := r.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.SetReadDeadline failed: %v", err)
|
|
||||||
}
|
|
||||||
if _, b, cm, err := r.ReadFrom(rb); err != nil {
|
|
||||||
t.Fatalf("ipv4.RawConn.ReadFrom failed: %v", err)
|
|
||||||
} else {
|
|
||||||
t.Logf("rcvd cmsg: %v", cm)
|
|
||||||
m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("icmp.ParseMessage failed: %v", err)
|
|
||||||
}
|
|
||||||
if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
|
|
||||||
// On Linux we must handle own sent packets.
|
|
||||||
goto loop
|
|
||||||
}
|
|
||||||
if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
|
|
||||||
t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
138
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/unicastsockopt_test.go
generated
vendored
138
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/unicastsockopt_test.go
generated
vendored
@@ -1,138 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv4_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go.net/internal/iana"
|
|
||||||
"github.com/hashicorp/go.net/internal/nettest"
|
|
||||||
"github.com/hashicorp/go.net/ipv4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestConnUnicastSocketOptions(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
ln, err := net.Listen("tcp4", "127.0.0.1:0")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Listen failed: %v", err)
|
|
||||||
}
|
|
||||||
defer ln.Close()
|
|
||||||
|
|
||||||
done := make(chan bool)
|
|
||||||
go acceptor(t, ln, done)
|
|
||||||
|
|
||||||
c, err := net.Dial("tcp4", ln.Addr().String())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.Dial failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
testUnicastSocketOptions(t, ipv4.NewConn(c))
|
|
||||||
|
|
||||||
<-done
|
|
||||||
}
|
|
||||||
|
|
||||||
var packetConnUnicastSocketOptionTests = []struct {
|
|
||||||
net, proto, addr string
|
|
||||||
}{
|
|
||||||
{"udp4", "", "127.0.0.1:0"},
|
|
||||||
{"ip4", ":icmp", "127.0.0.1"},
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPacketConnUnicastSocketOptions(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range packetConnUnicastSocketOptionTests {
|
|
||||||
if tt.net == "ip4" && os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket(%q, %q) failed: %v", tt.net+tt.proto, tt.addr, err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
testUnicastSocketOptions(t, ipv4.NewPacketConn(c))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRawConnUnicastSocketOptions(t *testing.T) {
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "nacl", "plan9", "solaris":
|
|
||||||
t.Skipf("not supported on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
if os.Getuid() != 0 {
|
|
||||||
t.Skip("must be root")
|
|
||||||
}
|
|
||||||
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
|
|
||||||
if ifi == nil {
|
|
||||||
t.Skipf("not available on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("net.ListenPacket failed: %v", err)
|
|
||||||
}
|
|
||||||
defer c.Close()
|
|
||||||
|
|
||||||
r, err := ipv4.NewRawConn(c)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("ipv4.NewRawConn failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
testUnicastSocketOptions(t, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
type testIPv4UnicastConn interface {
|
|
||||||
TOS() (int, error)
|
|
||||||
SetTOS(int) error
|
|
||||||
TTL() (int, error)
|
|
||||||
SetTTL(int) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func testUnicastSocketOptions(t *testing.T, c testIPv4UnicastConn) {
|
|
||||||
tos := iana.DiffServCS0 | iana.NotECNTransport
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "windows":
|
|
||||||
// IP_TOS option is supported on Windows 8 and beyond.
|
|
||||||
t.Skipf("skipping IP_TOS test on %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.SetTOS(tos); err != nil {
|
|
||||||
t.Fatalf("ipv4.Conn.SetTOS failed: %v", err)
|
|
||||||
}
|
|
||||||
if v, err := c.TOS(); err != nil {
|
|
||||||
t.Fatalf("ipv4.Conn.TOS failed: %v", err)
|
|
||||||
} else if v != tos {
|
|
||||||
t.Fatalf("got unexpected TOS value %v; expected %v", v, tos)
|
|
||||||
}
|
|
||||||
const ttl = 255
|
|
||||||
if err := c.SetTTL(ttl); err != nil {
|
|
||||||
t.Fatalf("ipv4.Conn.SetTTL failed: %v", err)
|
|
||||||
}
|
|
||||||
if v, err := c.TTL(); err != nil {
|
|
||||||
t.Fatalf("ipv4.Conn.TTL failed: %v", err)
|
|
||||||
} else if v != ttl {
|
|
||||||
t.Fatalf("got unexpected TTL value %v; expected %v", v, ttl)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
62
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_darwin.go
generated
vendored
62
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_darwin.go
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_darwin.go
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x14
|
|
||||||
sysIP_STRIPHDR = 0x17
|
|
||||||
sysIP_RECVTTL = 0x18
|
|
||||||
sysIP_BOUND_IF = 0x19
|
|
||||||
sysIP_PKTINFO = 0x1a
|
|
||||||
sysIP_RECVPKTINFO = 0x1a
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
sysIP_MULTICAST_VIF = 0xe
|
|
||||||
sysIP_MULTICAST_IFINDEX = 0x42
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = 0x46
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
|
|
||||||
sysIP_BLOCK_SOURCE = 0x48
|
|
||||||
sysIP_UNBLOCK_SOURCE = 0x49
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = 0xc
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
sysSizeofIPMreqn = 0xc
|
|
||||||
sysSizeofIPMreqSource = 0xc
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo struct {
|
|
||||||
Ifindex uint32
|
|
||||||
Spec_dst [4]byte /* in_addr */
|
|
||||||
Addr [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqn struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Address [4]byte /* in_addr */
|
|
||||||
Ifindex int32
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqSource struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Sourceaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
33
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_dragonfly.go
generated
vendored
33
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_dragonfly.go
generated
vendored
@@ -1,33 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_dragonfly.go
|
|
||||||
|
|
||||||
// +build dragonfly
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x14
|
|
||||||
sysIP_RECVTTL = 0x41
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_MULTICAST_VIF = 0xe
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
55
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_freebsd.go
generated
vendored
55
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_freebsd.go
generated
vendored
@@ -1,55 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_freebsd.go
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_SENDSRCADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x14
|
|
||||||
sysIP_ONESBCAST = 0x17
|
|
||||||
sysIP_BINDANY = 0x18
|
|
||||||
sysIP_RECVTTL = 0x41
|
|
||||||
sysIP_MINTTL = 0x42
|
|
||||||
sysIP_DONTFRAG = 0x43
|
|
||||||
sysIP_RECVTOS = 0x44
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
sysIP_MULTICAST_VIF = 0xe
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = 0x46
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
|
|
||||||
sysIP_BLOCK_SOURCE = 0x48
|
|
||||||
sysIP_UNBLOCK_SOURCE = 0x49
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
sysSizeofIPMreqn = 0xc
|
|
||||||
sysSizeofIPMreqSource = 0xc
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqn struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Address [4]byte /* in_addr */
|
|
||||||
Ifindex int32
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqSource struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Sourceaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
94
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_linux.go
generated
vendored
94
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_linux.go
generated
vendored
@@ -1,94 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_linux.go
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_TOS = 0x1
|
|
||||||
sysIP_TTL = 0x2
|
|
||||||
sysIP_HDRINCL = 0x3
|
|
||||||
sysIP_OPTIONS = 0x4
|
|
||||||
sysIP_ROUTER_ALERT = 0x5
|
|
||||||
sysIP_RECVOPTS = 0x6
|
|
||||||
sysIP_RETOPTS = 0x7
|
|
||||||
sysIP_PKTINFO = 0x8
|
|
||||||
sysIP_PKTOPTIONS = 0x9
|
|
||||||
sysIP_MTU_DISCOVER = 0xa
|
|
||||||
sysIP_RECVERR = 0xb
|
|
||||||
sysIP_RECVTTL = 0xc
|
|
||||||
sysIP_RECVTOS = 0xd
|
|
||||||
sysIP_MTU = 0xe
|
|
||||||
sysIP_FREEBIND = 0xf
|
|
||||||
sysIP_TRANSPARENT = 0x13
|
|
||||||
sysIP_RECVRETOPTS = 0x7
|
|
||||||
sysIP_ORIGDSTADDR = 0x14
|
|
||||||
sysIP_RECVORIGDSTADDR = 0x14
|
|
||||||
sysIP_MINTTL = 0x15
|
|
||||||
sysIP_NODEFRAG = 0x16
|
|
||||||
sysIP_UNICAST_IF = 0x32
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x20
|
|
||||||
sysIP_MULTICAST_TTL = 0x21
|
|
||||||
sysIP_MULTICAST_LOOP = 0x22
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0x23
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0x24
|
|
||||||
sysIP_UNBLOCK_SOURCE = 0x25
|
|
||||||
sysIP_BLOCK_SOURCE = 0x26
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
|
|
||||||
sysIP_MULTICAST_ALL = 0x31
|
|
||||||
|
|
||||||
sysIP_PMTUDISC_DONT = 0x0
|
|
||||||
sysIP_PMTUDISC_WANT = 0x1
|
|
||||||
sysIP_PMTUDISC_DO = 0x2
|
|
||||||
sysIP_PMTUDISC_PROBE = 0x3
|
|
||||||
sysIP_PMTUDISC_INTERFACE = 0x4
|
|
||||||
sysIP_PMTUDISC_OMIT = 0x5
|
|
||||||
|
|
||||||
sysSO_EE_ORIGIN_NONE = 0x0
|
|
||||||
sysSO_EE_ORIGIN_LOCAL = 0x1
|
|
||||||
sysSO_EE_ORIGIN_ICMP = 0x2
|
|
||||||
sysSO_EE_ORIGIN_ICMP6 = 0x3
|
|
||||||
sysSO_EE_ORIGIN_TXSTATUS = 0x4
|
|
||||||
sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = 0xc
|
|
||||||
sysSizeofSockExtendedErr = 0x10
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
sysSizeofIPMreqn = 0xc
|
|
||||||
sysSizeofIPMreqSource = 0xc
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo struct {
|
|
||||||
Ifindex int32
|
|
||||||
Spec_dst [4]byte /* in_addr */
|
|
||||||
Addr [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysSockExtendedErr struct {
|
|
||||||
Errno uint32
|
|
||||||
Origin uint8
|
|
||||||
Type uint8
|
|
||||||
Code uint8
|
|
||||||
Pad uint8
|
|
||||||
Info uint32
|
|
||||||
Data uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqn struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Address [4]byte /* in_addr */
|
|
||||||
Ifindex int32
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqSource struct {
|
|
||||||
Multiaddr uint32
|
|
||||||
Interface uint32
|
|
||||||
Sourceaddr uint32
|
|
||||||
}
|
|
||||||
30
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_netbsd.go
generated
vendored
30
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_netbsd.go
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_netbsd.go
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x14
|
|
||||||
sysIP_RECVTTL = 0x17
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
30
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_openbsd.go
generated
vendored
30
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_openbsd.go
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_openbsd.go
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x1e
|
|
||||||
sysIP_RECVTTL = 0x1f
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x9
|
|
||||||
sysIP_MULTICAST_TTL = 0xa
|
|
||||||
sysIP_MULTICAST_LOOP = 0xb
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0xc
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0xd
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
60
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_solaris.go
generated
vendored
60
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv4/zsys_solaris.go
generated
vendored
@@ -1,60 +0,0 @@
|
|||||||
// Created by cgo -godefs - DO NOT EDIT
|
|
||||||
// cgo -godefs defs_solaris.go
|
|
||||||
|
|
||||||
// +build solaris
|
|
||||||
|
|
||||||
package ipv4
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIP_OPTIONS = 0x1
|
|
||||||
sysIP_HDRINCL = 0x2
|
|
||||||
sysIP_TOS = 0x3
|
|
||||||
sysIP_TTL = 0x4
|
|
||||||
sysIP_RECVOPTS = 0x5
|
|
||||||
sysIP_RECVRETOPTS = 0x6
|
|
||||||
sysIP_RECVDSTADDR = 0x7
|
|
||||||
sysIP_RETOPTS = 0x8
|
|
||||||
sysIP_RECVIF = 0x9
|
|
||||||
sysIP_RECVSLLA = 0xa
|
|
||||||
sysIP_RECVTTL = 0xb
|
|
||||||
sysIP_NEXTHOP = 0x19
|
|
||||||
sysIP_PKTINFO = 0x1a
|
|
||||||
sysIP_RECVPKTINFO = 0x1a
|
|
||||||
sysIP_DONTFRAG = 0x1b
|
|
||||||
sysIP_BOUND_IF = 0x41
|
|
||||||
sysIP_UNSPEC_SRC = 0x42
|
|
||||||
sysIP_BROADCAST_TTL = 0x43
|
|
||||||
sysIP_DHCPINIT_IF = 0x45
|
|
||||||
|
|
||||||
sysIP_MULTICAST_IF = 0x10
|
|
||||||
sysIP_MULTICAST_TTL = 0x11
|
|
||||||
sysIP_MULTICAST_LOOP = 0x12
|
|
||||||
sysIP_ADD_MEMBERSHIP = 0x13
|
|
||||||
sysIP_DROP_MEMBERSHIP = 0x14
|
|
||||||
sysIP_BLOCK_SOURCE = 0x15
|
|
||||||
sysIP_UNBLOCK_SOURCE = 0x16
|
|
||||||
sysIP_ADD_SOURCE_MEMBERSHIP = 0x17
|
|
||||||
sysIP_DROP_SOURCE_MEMBERSHIP = 0x18
|
|
||||||
|
|
||||||
sysSizeofInetPktinfo = 0xc
|
|
||||||
|
|
||||||
sysSizeofIPMreq = 0x8
|
|
||||||
sysSizeofIPMreqSource = 0xc
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysInetPktinfo struct {
|
|
||||||
Ifindex uint32
|
|
||||||
Spec_dst [4]byte /* in_addr */
|
|
||||||
Addr [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreq struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
|
|
||||||
type sysIPMreqSource struct {
|
|
||||||
Multiaddr [4]byte /* in_addr */
|
|
||||||
Sourceaddr [4]byte /* in_addr */
|
|
||||||
Interface [4]byte /* in_addr */
|
|
||||||
}
|
|
||||||
83
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control.go
generated
vendored
83
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control.go
generated
vendored
@@ -1,83 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errMissingAddress = errors.New("missing address")
|
|
||||||
errInvalidConnType = errors.New("invalid conn type")
|
|
||||||
errNoSuchInterface = errors.New("no such interface")
|
|
||||||
)
|
|
||||||
|
|
||||||
// References:
|
|
||||||
//
|
|
||||||
// RFC 2292 Advanced Sockets API for IPv6
|
|
||||||
// http://tools.ietf.org/html/rfc2292
|
|
||||||
// RFC 2460 Internet Protocol, Version 6 (IPv6) Specification
|
|
||||||
// http://tools.ietf.org/html/rfc2460
|
|
||||||
// RFC 3493 Basic Socket Interface Extensions for IPv6
|
|
||||||
// http://tools.ietf.org/html/rfc3493.html
|
|
||||||
// RFC 3542 Advanced Sockets Application Program Interface (API) for IPv6
|
|
||||||
// http://tools.ietf.org/html/rfc3542
|
|
||||||
//
|
|
||||||
// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the
|
|
||||||
// former still support RFC 2292 only. Please be aware that almost
|
|
||||||
// all protocol implementations prohibit using a combination of RFC
|
|
||||||
// 2292 and RFC 3542 for some practical reasons.
|
|
||||||
|
|
||||||
type rawOpt struct {
|
|
||||||
sync.Mutex
|
|
||||||
cflags ControlFlags
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *rawOpt) set(f ControlFlags) { c.cflags |= f }
|
|
||||||
func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f }
|
|
||||||
func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 }
|
|
||||||
|
|
||||||
// A ControlFlags represents per packet basis IP-level socket option
|
|
||||||
// control flags.
|
|
||||||
type ControlFlags uint
|
|
||||||
|
|
||||||
const (
|
|
||||||
FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet
|
|
||||||
FlagHopLimit // pass the hop limit on the received packet
|
|
||||||
FlagSrc // pass the source address on the received packet
|
|
||||||
FlagDst // pass the destination address on the received packet
|
|
||||||
FlagInterface // pass the interface index on the received packet
|
|
||||||
FlagPathMTU // pass the path MTU on the received packet path
|
|
||||||
)
|
|
||||||
|
|
||||||
// A ControlMessage represents per packet basis IP-level socket
|
|
||||||
// options.
|
|
||||||
type ControlMessage struct {
|
|
||||||
// Receiving socket options: SetControlMessage allows to
|
|
||||||
// receive the options from the protocol stack using ReadFrom
|
|
||||||
// method of PacketConn.
|
|
||||||
//
|
|
||||||
// Specifying socket options: ControlMessage for WriteTo
|
|
||||||
// method of PacketConn allows to send the options to the
|
|
||||||
// protocol stack.
|
|
||||||
//
|
|
||||||
TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying
|
|
||||||
HopLimit int // hop limit, must be 1 <= value <= 255 when specifying
|
|
||||||
Src net.IP // source address, specifying only
|
|
||||||
Dst net.IP // destination address, receiving only
|
|
||||||
IfIndex int // interface index, must be 1 <= value when specifying
|
|
||||||
NextHop net.IP // next hop address, specifying only
|
|
||||||
MTU int // path MTU, receiving only
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cm *ControlMessage) String() string {
|
|
||||||
if cm == nil {
|
|
||||||
return "<nil>"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("tclass: %#x, hoplim: %v, src: %v, dst: %v, ifindex: %v, nexthop: %v, mtu: %v", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU)
|
|
||||||
}
|
|
||||||
151
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc2292_unix.go
generated
vendored
151
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc2292_unix.go
generated
vendored
@@ -1,151 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const pktinfo = FlagDst | FlagInterface
|
|
||||||
|
|
||||||
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
opt.Lock()
|
|
||||||
defer opt.Unlock()
|
|
||||||
if cf&FlagHopLimit != 0 {
|
|
||||||
if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagHopLimit)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagHopLimit)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if cf&pktinfo != 0 {
|
|
||||||
if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(cf & pktinfo)
|
|
||||||
} else {
|
|
||||||
opt.clear(cf & pktinfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) (oob []byte) {
|
|
||||||
opt.Lock()
|
|
||||||
defer opt.Unlock()
|
|
||||||
l, off := 0, 0
|
|
||||||
if opt.isset(FlagHopLimit) {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(pktinfo) {
|
|
||||||
l += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
if opt.isset(FlagHopLimit) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockopt2292HopLimit
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(pktinfo) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockopt2292PacketInfo
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
|
|
||||||
off += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
if len(b) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
cmsgs, err := syscall.ParseSocketControlMessage(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, os.NewSyscallError("parse socket control message", err)
|
|
||||||
}
|
|
||||||
cm := &ControlMessage{}
|
|
||||||
for _, m := range cmsgs {
|
|
||||||
if m.Header.Level != ianaProtocolIPv6 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch m.Header.Type {
|
|
||||||
case sysSockopt2292HopLimit:
|
|
||||||
cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
|
|
||||||
case sysSockopt2292PacketInfo:
|
|
||||||
pi := (*sysPacketInfo)(unsafe.Pointer(&m.Data[0]))
|
|
||||||
cm.IfIndex = int(pi.IfIndex)
|
|
||||||
cm.Dst = pi.IP[:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cm, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
|
|
||||||
if cm == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
l, off := 0, 0
|
|
||||||
if cm.HopLimit > 0 {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
pion := false
|
|
||||||
if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
|
|
||||||
pion = true
|
|
||||||
l += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if len(cm.NextHop) == net.IPv6len {
|
|
||||||
l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
if cm.HopLimit > 0 {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockopt2292HopLimit
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
data := oob[off+syscall.CmsgLen(0):]
|
|
||||||
*(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if pion {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockopt2292PacketInfo
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
|
|
||||||
pi := (*sysPacketInfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
|
|
||||||
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
|
|
||||||
copy(pi.IP[:], ip)
|
|
||||||
}
|
|
||||||
if cm.IfIndex != 0 {
|
|
||||||
pi.IfIndex = uint32(cm.IfIndex)
|
|
||||||
}
|
|
||||||
off += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if len(cm.NextHop) == net.IPv6len {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockopt2292NextHop
|
|
||||||
m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
|
|
||||||
sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
|
|
||||||
setSockaddr(sa, cm.NextHop, cm.IfIndex)
|
|
||||||
off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc3542_stub.go
generated
vendored
27
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc3542_stub.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) (oob []byte) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
210
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc3542_unix.go
generated
vendored
210
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/control_rfc3542_unix.go
generated
vendored
@@ -1,210 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const pktinfo = FlagDst | FlagInterface
|
|
||||||
|
|
||||||
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
opt.Lock()
|
|
||||||
defer opt.Unlock()
|
|
||||||
if cf&FlagTrafficClass != 0 {
|
|
||||||
if err := setIPv6ReceiveTrafficClass(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagTrafficClass)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagTrafficClass)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if cf&FlagHopLimit != 0 {
|
|
||||||
if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagHopLimit)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagHopLimit)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if cf&pktinfo != 0 {
|
|
||||||
if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(cf & pktinfo)
|
|
||||||
} else {
|
|
||||||
opt.clear(cf & pktinfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if cf&FlagPathMTU != 0 {
|
|
||||||
if err := setIPv6ReceivePathMTU(fd, on); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if on {
|
|
||||||
opt.set(FlagPathMTU)
|
|
||||||
} else {
|
|
||||||
opt.clear(FlagPathMTU)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) (oob []byte) {
|
|
||||||
opt.Lock()
|
|
||||||
defer opt.Unlock()
|
|
||||||
l, off := 0, 0
|
|
||||||
if opt.isset(FlagTrafficClass) {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagHopLimit) {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(pktinfo) {
|
|
||||||
l += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagPathMTU) {
|
|
||||||
l += syscall.CmsgSpace(sysSizeofMTUInfo)
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
if opt.isset(FlagTrafficClass) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptReceiveTrafficClass
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagHopLimit) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptReceiveHopLimit
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if opt.isset(pktinfo) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptReceivePacketInfo
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
|
|
||||||
off += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if opt.isset(FlagPathMTU) {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptReceivePathMTU
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofMTUInfo))
|
|
||||||
off += syscall.CmsgSpace(sysSizeofMTUInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
if len(b) == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
cmsgs, err := syscall.ParseSocketControlMessage(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, os.NewSyscallError("parse socket control message", err)
|
|
||||||
}
|
|
||||||
cm := &ControlMessage{}
|
|
||||||
for _, m := range cmsgs {
|
|
||||||
if m.Header.Level != ianaProtocolIPv6 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch m.Header.Type {
|
|
||||||
case sysSockoptTrafficClass:
|
|
||||||
cm.TrafficClass = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
|
|
||||||
case sysSockoptHopLimit:
|
|
||||||
cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
|
|
||||||
case sysSockoptPacketInfo:
|
|
||||||
pi := (*sysPacketInfo)(unsafe.Pointer(&m.Data[0]))
|
|
||||||
cm.Dst = pi.IP[:]
|
|
||||||
cm.IfIndex = int(pi.IfIndex)
|
|
||||||
case sysSockoptPathMTU:
|
|
||||||
mi := (*sysMTUInfo)(unsafe.Pointer(&m.Data[0]))
|
|
||||||
cm.Dst = mi.Addr.Addr[:]
|
|
||||||
cm.IfIndex = int(mi.Addr.Scope_id)
|
|
||||||
cm.MTU = int(mi.MTU)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cm, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
|
|
||||||
if cm == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
l, off := 0, 0
|
|
||||||
if cm.TrafficClass > 0 {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if cm.HopLimit > 0 {
|
|
||||||
l += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
pion := false
|
|
||||||
if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
|
|
||||||
pion = true
|
|
||||||
l += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if len(cm.NextHop) == net.IPv6len {
|
|
||||||
l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
|
|
||||||
}
|
|
||||||
if l > 0 {
|
|
||||||
oob = make([]byte, l)
|
|
||||||
if cm.TrafficClass > 0 {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptTrafficClass
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
data := oob[off+syscall.CmsgLen(0):]
|
|
||||||
*(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.TrafficClass)
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if cm.HopLimit > 0 {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptHopLimit
|
|
||||||
m.SetLen(syscall.CmsgLen(4))
|
|
||||||
data := oob[off+syscall.CmsgLen(0):]
|
|
||||||
*(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
|
|
||||||
off += syscall.CmsgSpace(4)
|
|
||||||
}
|
|
||||||
if pion {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptPacketInfo
|
|
||||||
m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
|
|
||||||
pi := (*sysPacketInfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
|
|
||||||
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
|
|
||||||
copy(pi.IP[:], ip)
|
|
||||||
}
|
|
||||||
if cm.IfIndex != 0 {
|
|
||||||
pi.IfIndex = uint32(cm.IfIndex)
|
|
||||||
}
|
|
||||||
off += syscall.CmsgSpace(sysSizeofPacketInfo)
|
|
||||||
}
|
|
||||||
if len(cm.NextHop) == net.IPv6len {
|
|
||||||
m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
|
|
||||||
m.Level = ianaProtocolIPv6
|
|
||||||
m.Type = sysSockoptNextHop
|
|
||||||
m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
|
|
||||||
sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
|
|
||||||
setSockaddr(sa, cm.NextHop, cm.IfIndex)
|
|
||||||
off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return syscall.EWINDOWS
|
|
||||||
}
|
|
||||||
|
|
||||||
func newControlMessage(opt *rawOpt) (oob []byte) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseControlMessage(b []byte) (*ControlMessage, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, syscall.EWINDOWS
|
|
||||||
}
|
|
||||||
|
|
||||||
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
95
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_darwin.go
generated
vendored
95
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_darwin.go
generated
vendored
@@ -1,95 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#define __APPLE_USE_RFC_3542
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE = C.IPV6_PORTRANGE
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
sysIPV6_2292PKTINFO = C.IPV6_2292PKTINFO
|
|
||||||
sysIPV6_2292HOPLIMIT = C.IPV6_2292HOPLIMIT
|
|
||||||
sysIPV6_2292NEXTHOP = C.IPV6_2292NEXTHOP
|
|
||||||
sysIPV6_2292HOPOPTS = C.IPV6_2292HOPOPTS
|
|
||||||
sysIPV6_2292DSTOPTS = C.IPV6_2292DSTOPTS
|
|
||||||
sysIPV6_2292RTHDR = C.IPV6_2292RTHDR
|
|
||||||
|
|
||||||
sysIPV6_2292PKTOPTIONS = C.IPV6_2292PKTOPTIONS
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY
|
|
||||||
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
|
|
||||||
sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL
|
|
||||||
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
|
|
||||||
sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR
|
|
||||||
|
|
||||||
sysIPV6_BOUND_IF = C.IPV6_BOUND_IF
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
|
|
||||||
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
|
|
||||||
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
84
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_dragonfly.go
generated
vendored
84
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_dragonfly.go
generated
vendored
@@ -1,84 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
sysIPV6_PORTRANGE = C.IPV6_PORTRANGE
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY
|
|
||||||
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
|
|
||||||
sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL
|
|
||||||
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
|
|
||||||
sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
|
|
||||||
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
|
|
||||||
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
87
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_freebsd.go
generated
vendored
87
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_freebsd.go
generated
vendored
@@ -1,87 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
sysIPV6_PORTRANGE = C.IPV6_PORTRANGE
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY
|
|
||||||
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
|
|
||||||
sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL
|
|
||||||
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
|
|
||||||
sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR
|
|
||||||
|
|
||||||
sysIPV6_BINDANY = C.IPV6_BINDANY
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
|
|
||||||
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
|
|
||||||
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
119
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_linux.go
generated
vendored
119
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_linux.go
generated
vendored
@@ -1,119 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <linux/in6.h>
|
|
||||||
#include <linux/ipv6.h>
|
|
||||||
#include <linux/icmpv6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_ADDRFORM = C.IPV6_ADDRFORM
|
|
||||||
sysIPV6_2292PKTINFO = C.IPV6_2292PKTINFO
|
|
||||||
sysIPV6_2292HOPOPTS = C.IPV6_2292HOPOPTS
|
|
||||||
sysIPV6_2292DSTOPTS = C.IPV6_2292DSTOPTS
|
|
||||||
sysIPV6_2292RTHDR = C.IPV6_2292RTHDR
|
|
||||||
sysIPV6_2292PKTOPTIONS = C.IPV6_2292PKTOPTIONS
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_2292HOPLIMIT = C.IPV6_2292HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_FLOWINFO = C.IPV6_FLOWINFO
|
|
||||||
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP
|
|
||||||
sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP
|
|
||||||
sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT
|
|
||||||
sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER
|
|
||||||
sysIPV6_MTU = C.IPV6_MTU
|
|
||||||
sysIPV6_RECVERR = C.IPV6_RECVERR
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST
|
|
||||||
sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST
|
|
||||||
|
|
||||||
sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT
|
|
||||||
sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT
|
|
||||||
sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO
|
|
||||||
sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE
|
|
||||||
sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE
|
|
||||||
sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT
|
|
||||||
|
|
||||||
sysIPV6_FLOWLABEL_MGR = C.IPV6_FLOWLABEL_MGR
|
|
||||||
sysIPV6_FLOWINFO_SEND = C.IPV6_FLOWINFO_SEND
|
|
||||||
|
|
||||||
sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY
|
|
||||||
sysIPV6_XFRM_POLICY = C.IPV6_XFRM_POLICY
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
|
|
||||||
sysIPV6_ADDR_PREFERENCES = C.IPV6_ADDR_PREFERENCES
|
|
||||||
|
|
||||||
sysIPV6_PREFER_SRC_TMP = C.IPV6_PREFER_SRC_TMP
|
|
||||||
sysIPV6_PREFER_SRC_PUBLIC = C.IPV6_PREFER_SRC_PUBLIC
|
|
||||||
sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = C.IPV6_PREFER_SRC_PUBTMP_DEFAULT
|
|
||||||
sysIPV6_PREFER_SRC_COA = C.IPV6_PREFER_SRC_COA
|
|
||||||
sysIPV6_PREFER_SRC_HOME = C.IPV6_PREFER_SRC_HOME
|
|
||||||
sysIPV6_PREFER_SRC_CGA = C.IPV6_PREFER_SRC_CGA
|
|
||||||
sysIPV6_PREFER_SRC_NONCGA = C.IPV6_PREFER_SRC_NONCGA
|
|
||||||
|
|
||||||
sysIPV6_MINHOPCOUNT = C.IPV6_MINHOPCOUNT
|
|
||||||
|
|
||||||
sysIPV6_ORIGDSTADDR = C.IPV6_ORIGDSTADDR
|
|
||||||
sysIPV6_RECVORIGDSTADDR = C.IPV6_RECVORIGDSTADDR
|
|
||||||
sysIPV6_TRANSPARENT = C.IPV6_TRANSPARENT
|
|
||||||
sysIPV6_UNICAST_IF = C.IPV6_UNICAST_IF
|
|
||||||
|
|
||||||
sysICMPV6_FILTER = C.ICMPV6_FILTER
|
|
||||||
|
|
||||||
sysICMPV6_FILTER_BLOCK = C.ICMPV6_FILTER_BLOCK
|
|
||||||
sysICMPV6_FILTER_PASS = C.ICMPV6_FILTER_PASS
|
|
||||||
sysICMPV6_FILTER_BLOCKOTHERS = C.ICMPV6_FILTER_BLOCKOTHERS
|
|
||||||
sysICMPV6_FILTER_PASSONLY = C.ICMPV6_FILTER_PASSONLY
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6FlowlabelReq C.struct_in6_flowlabel_req
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
80
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_netbsd.go
generated
vendored
80
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_netbsd.go
generated
vendored
@@ -1,80 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
sysIPV6_PORTRANGE = C.IPV6_PORTRANGE
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_IPSEC_POLICY = C.IPV6_IPSEC_POLICY
|
|
||||||
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
|
|
||||||
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
|
|
||||||
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
89
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_openbsd.go
generated
vendored
89
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_openbsd.go
generated
vendored
@@ -1,89 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
sysIPV6_PORTRANGE = C.IPV6_PORTRANGE
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
|
|
||||||
sysIPV6_AUTH_LEVEL = C.IPV6_AUTH_LEVEL
|
|
||||||
sysIPV6_ESP_TRANS_LEVEL = C.IPV6_ESP_TRANS_LEVEL
|
|
||||||
sysIPV6_ESP_NETWORK_LEVEL = C.IPV6_ESP_NETWORK_LEVEL
|
|
||||||
sysIPSEC6_OUTSA = C.IPSEC6_OUTSA
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
|
|
||||||
sysIPV6_AUTOFLOWLABEL = C.IPV6_AUTOFLOWLABEL
|
|
||||||
sysIPV6_IPCOMP_LEVEL = C.IPV6_IPCOMP_LEVEL
|
|
||||||
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
sysIPV6_PIPEX = C.IPV6_PIPEX
|
|
||||||
|
|
||||||
sysIPV6_RTABLE = C.IPV6_RTABLE
|
|
||||||
|
|
||||||
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
|
|
||||||
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
|
|
||||||
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
96
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_solaris.go
generated
vendored
96
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/defs_solaris.go
generated
vendored
@@ -1,96 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// +godefs map struct_in6_addr [16]byte /* in6_addr */
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/icmp6.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
const (
|
|
||||||
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
|
|
||||||
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
|
|
||||||
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
|
|
||||||
sysIPV6_JOIN_GROUP = C.IPV6_JOIN_GROUP
|
|
||||||
sysIPV6_LEAVE_GROUP = C.IPV6_LEAVE_GROUP
|
|
||||||
|
|
||||||
sysIPV6_PKTINFO = C.IPV6_PKTINFO
|
|
||||||
|
|
||||||
sysIPV6_HOPLIMIT = C.IPV6_HOPLIMIT
|
|
||||||
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
|
|
||||||
sysIPV6_HOPOPTS = C.IPV6_HOPOPTS
|
|
||||||
sysIPV6_DSTOPTS = C.IPV6_DSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RTHDR = C.IPV6_RTHDR
|
|
||||||
sysIPV6_RTHDRDSTOPTS = C.IPV6_RTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVPKTINFO = C.IPV6_RECVPKTINFO
|
|
||||||
sysIPV6_RECVHOPLIMIT = C.IPV6_RECVHOPLIMIT
|
|
||||||
sysIPV6_RECVHOPOPTS = C.IPV6_RECVHOPOPTS
|
|
||||||
|
|
||||||
sysIPV6_RECVRTHDR = C.IPV6_RECVRTHDR
|
|
||||||
|
|
||||||
sysIPV6_RECVRTHDRDSTOPTS = C.IPV6_RECVRTHDRDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_CHECKSUM = C.IPV6_CHECKSUM
|
|
||||||
sysIPV6_RECVTCLASS = C.IPV6_RECVTCLASS
|
|
||||||
sysIPV6_USE_MIN_MTU = C.IPV6_USE_MIN_MTU
|
|
||||||
sysIPV6_DONTFRAG = C.IPV6_DONTFRAG
|
|
||||||
sysIPV6_SEC_OPT = C.IPV6_SEC_OPT
|
|
||||||
sysIPV6_SRC_PREFERENCES = C.IPV6_SRC_PREFERENCES
|
|
||||||
sysIPV6_RECVPATHMTU = C.IPV6_RECVPATHMTU
|
|
||||||
sysIPV6_PATHMTU = C.IPV6_PATHMTU
|
|
||||||
sysIPV6_TCLASS = C.IPV6_TCLASS
|
|
||||||
sysIPV6_V6ONLY = C.IPV6_V6ONLY
|
|
||||||
|
|
||||||
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
|
|
||||||
|
|
||||||
sysIPV6_PREFER_SRC_HOME = C.IPV6_PREFER_SRC_HOME
|
|
||||||
sysIPV6_PREFER_SRC_COA = C.IPV6_PREFER_SRC_COA
|
|
||||||
sysIPV6_PREFER_SRC_PUBLIC = C.IPV6_PREFER_SRC_PUBLIC
|
|
||||||
sysIPV6_PREFER_SRC_TMP = C.IPV6_PREFER_SRC_TMP
|
|
||||||
sysIPV6_PREFER_SRC_NONCGA = C.IPV6_PREFER_SRC_NONCGA
|
|
||||||
sysIPV6_PREFER_SRC_CGA = C.IPV6_PREFER_SRC_CGA
|
|
||||||
|
|
||||||
sysIPV6_PREFER_SRC_MIPMASK = C.IPV6_PREFER_SRC_MIPMASK
|
|
||||||
sysIPV6_PREFER_SRC_MIPDEFAULT = C.IPV6_PREFER_SRC_MIPDEFAULT
|
|
||||||
sysIPV6_PREFER_SRC_TMPMASK = C.IPV6_PREFER_SRC_TMPMASK
|
|
||||||
sysIPV6_PREFER_SRC_TMPDEFAULT = C.IPV6_PREFER_SRC_TMPDEFAULT
|
|
||||||
sysIPV6_PREFER_SRC_CGAMASK = C.IPV6_PREFER_SRC_CGAMASK
|
|
||||||
sysIPV6_PREFER_SRC_CGADEFAULT = C.IPV6_PREFER_SRC_CGADEFAULT
|
|
||||||
|
|
||||||
sysIPV6_PREFER_SRC_MASK = C.IPV6_PREFER_SRC_MASK
|
|
||||||
|
|
||||||
sysIPV6_PREFER_SRC_DEFAULT = C.IPV6_PREFER_SRC_DEFAULT
|
|
||||||
|
|
||||||
sysIPV6_BOUND_IF = C.IPV6_BOUND_IF
|
|
||||||
sysIPV6_UNSPEC_SRC = C.IPV6_UNSPEC_SRC
|
|
||||||
|
|
||||||
sysICMP6_FILTER = C.ICMP6_FILTER
|
|
||||||
|
|
||||||
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
|
||||||
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
|
|
||||||
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
|
||||||
|
|
||||||
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
|
||||||
)
|
|
||||||
|
|
||||||
type sysSockaddrInet6 C.struct_sockaddr_in6
|
|
||||||
|
|
||||||
type sysInet6Pktinfo C.struct_in6_pktinfo
|
|
||||||
|
|
||||||
type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
|
|
||||||
|
|
||||||
type sysIPv6Mreq C.struct_ipv6_mreq
|
|
||||||
|
|
||||||
type sysICMPv6Filter C.struct_icmp6_filter
|
|
||||||
178
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/dgramopt_posix.go
generated
vendored
178
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/dgramopt_posix.go
generated
vendored
@@ -1,178 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd windows
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MulticastHopLimit returns the hop limit field value for outgoing
|
|
||||||
// multicast packets.
|
|
||||||
func (c *dgramOpt) MulticastHopLimit() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return ipv6MulticastHopLimit(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastHopLimit sets the hop limit field value for future
|
|
||||||
// outgoing multicast packets.
|
|
||||||
func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6MulticastHopLimit(fd, hoplim)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastInterface returns the default interface for multicast
|
|
||||||
// packet transmissions.
|
|
||||||
func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ipv6MulticastInterface(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastInterface sets the default interface for future
|
|
||||||
// multicast packet transmissions.
|
|
||||||
func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6MulticastInterface(fd, ifi)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastLoopback reports whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) MulticastLoopback() (bool, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return false, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return ipv6MulticastLoopback(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastLoopback sets whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) SetMulticastLoopback(on bool) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6MulticastLoopback(fd, on)
|
|
||||||
}
|
|
||||||
|
|
||||||
// JoinGroup joins the group address group on the interface ifi.
|
|
||||||
// It uses the system assigned multicast interface when ifi is nil,
|
|
||||||
// although this is not recommended because the assignment depends on
|
|
||||||
// platforms and sometimes it might require routing configuration.
|
|
||||||
func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
grp := netAddrToIP16(group)
|
|
||||||
if grp == nil {
|
|
||||||
return errMissingAddress
|
|
||||||
}
|
|
||||||
return joinIPv6Group(fd, ifi, grp)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LeaveGroup leaves the group address group on the interface ifi.
|
|
||||||
func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
grp := netAddrToIP16(group)
|
|
||||||
if grp == nil {
|
|
||||||
return errMissingAddress
|
|
||||||
}
|
|
||||||
return leaveIPv6Group(fd, ifi, grp)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checksum reports whether the kernel will compute, store or verify a
|
|
||||||
// checksum for both incoming and outgoing packets. If on is true, it
|
|
||||||
// returns an offset in bytes into the data of where the checksum
|
|
||||||
// field is located.
|
|
||||||
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return false, 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return false, 0, err
|
|
||||||
}
|
|
||||||
return ipv6Checksum(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetChecksum enables the kernel checksum processing. If on is ture,
|
|
||||||
// the offset should be an offset in bytes into the data of where the
|
|
||||||
// checksum field is located.
|
|
||||||
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6Checksum(fd, on, offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ICMPFilter returns an ICMP filter.
|
|
||||||
func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return nil, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ipv6ICMPFilter(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetICMPFilter deploys the ICMP filter.
|
|
||||||
func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6ICMPFilter(fd, f)
|
|
||||||
}
|
|
||||||
95
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/dgramopt_stub.go
generated
vendored
95
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/dgramopt_stub.go
generated
vendored
@@ -1,95 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
// MulticastHopLimit returns the hop limit field value for outgoing
|
|
||||||
// multicast packets.
|
|
||||||
func (c *dgramOpt) MulticastHopLimit() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastHopLimit sets the hop limit field value for future
|
|
||||||
// outgoing multicast packets.
|
|
||||||
func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastInterface returns the default interface for multicast
|
|
||||||
// packet transmissions.
|
|
||||||
func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastInterface sets the default interface for future
|
|
||||||
// multicast packet transmissions.
|
|
||||||
func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// MulticastLoopback reports whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) MulticastLoopback() (bool, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return false, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMulticastLoopback sets whether transmitted multicast packets
|
|
||||||
// should be copied and send back to the originator.
|
|
||||||
func (c *dgramOpt) SetMulticastLoopback(on bool) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// JoinGroup joins the group address group on the interface ifi.
|
|
||||||
// It uses the system assigned multicast interface when ifi is nil,
|
|
||||||
// although this is not recommended because the assignment depends on
|
|
||||||
// platforms and sometimes it might require routing configuration.
|
|
||||||
func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// LeaveGroup leaves the group address group on the interface ifi.
|
|
||||||
func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checksum reports whether the kernel will compute, store or verify a
|
|
||||||
// checksum for both incoming and outgoing packets. If on is true, it
|
|
||||||
// returns an offset in bytes into the data of where the checksum
|
|
||||||
// field is located.
|
|
||||||
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return false, 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetChecksum enables the kernel checksum processing. If on is ture,
|
|
||||||
// the offset should be an offset in bytes into the data of where the
|
|
||||||
// checksum field is located.
|
|
||||||
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// ICMPFilter returns an ICMP filter.
|
|
||||||
func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return nil, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetICMPFilter deploys the ICMP filter.
|
|
||||||
func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
193
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/doc.go
generated
vendored
193
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/doc.go
generated
vendored
@@ -1,193 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package ipv6 implements IP-level socket options for the Internet
|
|
||||||
// Protocol version 6.
|
|
||||||
//
|
|
||||||
// The package provides IP-level socket options that allow
|
|
||||||
// manipulation of IPv6 facilities. The IPv6 and socket options for
|
|
||||||
// IPv6 are defined in RFC 2460, RFC 3493 and RFC 3542.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Unicasting
|
|
||||||
//
|
|
||||||
// The options for unicasting are available for net.TCPConn,
|
|
||||||
// net.UDPConn and net.IPConn which are created as network connections
|
|
||||||
// that use the IPv6 transport. When a single TCP connection carrying
|
|
||||||
// a data flow of multiple packets needs to indicate the flow is
|
|
||||||
// important, ipv6.Conn is used to set the traffic class field on the
|
|
||||||
// IPv6 header for each packet.
|
|
||||||
//
|
|
||||||
// ln, err := net.Listen("tcp6", "[::]:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer ln.Close()
|
|
||||||
// for {
|
|
||||||
// c, err := ln.Accept()
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// go func(c net.Conn) {
|
|
||||||
// defer c.Close()
|
|
||||||
//
|
|
||||||
// The outgoing packets will be labeled DiffServ assured forwarding
|
|
||||||
// class 1 low drop precedence, as known as AF11 packets.
|
|
||||||
//
|
|
||||||
// if err := ipv6.NewConn(c).SetTrafficClass(DiffServAF11); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if _, err := c.Write(data); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// }(c)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Multicasting
|
|
||||||
//
|
|
||||||
// The options for multicasting are available for net.UDPConn and
|
|
||||||
// net.IPconn which are created as network connections that use the
|
|
||||||
// IPv6 transport. A few network facilities must be prepared before
|
|
||||||
// you begin multicasting, at a minimum joining network interfaces and
|
|
||||||
// multicast groups.
|
|
||||||
//
|
|
||||||
// en0, err := net.InterfaceByName("en0")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// en1, err := net.InterfaceByIndex(911)
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// group := net.ParseIP("ff02::114")
|
|
||||||
//
|
|
||||||
// First, an application listens to an appropriate address with an
|
|
||||||
// appropriate service port.
|
|
||||||
//
|
|
||||||
// c, err := net.ListenPacket("udp6", "[::]:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c.Close()
|
|
||||||
//
|
|
||||||
// Second, the application joins multicast groups, starts listening to
|
|
||||||
// the groups on the specified network interfaces. Note that the
|
|
||||||
// service port for transport layer protocol does not matter with this
|
|
||||||
// operation as joining groups affects only network and link layer
|
|
||||||
// protocols, such as IPv6 and Ethernet.
|
|
||||||
//
|
|
||||||
// p := ipv6.NewPacketConn(c)
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application might set per packet control message transmissions
|
|
||||||
// between the protocol stack within the kernel. When the application
|
|
||||||
// needs a destination address on an incoming packet,
|
|
||||||
// SetControlMessage of ipv6.PacketConn is used to enable control
|
|
||||||
// message transmissons.
|
|
||||||
//
|
|
||||||
// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application could identify whether the received packets are
|
|
||||||
// of interest by using the control message that contains the
|
|
||||||
// destination address of the received packet.
|
|
||||||
//
|
|
||||||
// b := make([]byte, 1500)
|
|
||||||
// for {
|
|
||||||
// n, rcm, src, err := p.ReadFrom(b)
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if rcm.Dst.IsMulticast() {
|
|
||||||
// if rcm.Dst.Equal(group)
|
|
||||||
// // joined group, do something
|
|
||||||
// } else {
|
|
||||||
// // unknown group, discard
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// The application can also send both unicast and multicast packets.
|
|
||||||
//
|
|
||||||
// p.SetTrafficClass(DiffServCS0)
|
|
||||||
// p.SetHopLimit(16)
|
|
||||||
// if _, err := p.WriteTo(data[:n], nil, src); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// dst := &net.UDPAddr{IP: group, Port: 1024}
|
|
||||||
// wcm := ipv6.ControlMessage{TrafficClass: DiffServCS7, HopLimit: 1}
|
|
||||||
// for _, ifi := range []*net.Interface{en0, en1} {
|
|
||||||
// wcm.IfIndex = ifi.Index
|
|
||||||
// if _, err := p.WriteTo(data[:n], &wcm, dst); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// More multicasting
|
|
||||||
//
|
|
||||||
// An application that uses PacketConn may join multiple multicast
|
|
||||||
// groups. For example, a UDP listener with port 1024 might join two
|
|
||||||
// different groups across over two different network interfaces by
|
|
||||||
// using:
|
|
||||||
//
|
|
||||||
// c, err := net.ListenPacket("udp6", "[::]:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c.Close()
|
|
||||||
// p := ipv6.NewPacketConn(c)
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// It is possible for multiple UDP listeners that listen on the same
|
|
||||||
// UDP port to join the same multicast group. The net package will
|
|
||||||
// provide a socket that listens to a wildcard address with reusable
|
|
||||||
// UDP port when an appropriate multicast address prefix is passed to
|
|
||||||
// the net.ListenPacket or net.ListenUDP.
|
|
||||||
//
|
|
||||||
// c1, err := net.ListenPacket("udp6", "[ff02::]:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c1.Close()
|
|
||||||
// c2, err := net.ListenPacket("udp6", "[ff02::]:1024")
|
|
||||||
// if err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// defer c2.Close()
|
|
||||||
// p1 := ipv6.NewPacketConn(c1)
|
|
||||||
// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// p2 := ipv6.NewPacketConn(c2)
|
|
||||||
// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Also it is possible for the application to leave or rejoin a
|
|
||||||
// multicast group on the network interface.
|
|
||||||
//
|
|
||||||
// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil {
|
|
||||||
// // error handling
|
|
||||||
// }
|
|
||||||
package ipv6
|
|
||||||
119
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/endpoint.go
generated
vendored
119
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/endpoint.go
generated
vendored
@@ -1,119 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Conn represents a network endpoint that uses IPv6 transport.
|
|
||||||
// It allows to set basic IP-level socket options such as traffic
|
|
||||||
// class and hop limit.
|
|
||||||
type Conn struct {
|
|
||||||
genericOpt
|
|
||||||
}
|
|
||||||
|
|
||||||
type genericOpt struct {
|
|
||||||
net.Conn
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
|
|
||||||
|
|
||||||
// PathMTU returns a path MTU value for the destination associated
|
|
||||||
// with the endpoint.
|
|
||||||
func (c *Conn) PathMTU() (int, error) {
|
|
||||||
if !c.genericOpt.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.genericOpt.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return ipv6PathMTU(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewConn returns a new Conn.
|
|
||||||
func NewConn(c net.Conn) *Conn {
|
|
||||||
return &Conn{
|
|
||||||
genericOpt: genericOpt{Conn: c},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// A PacketConn represents a packet network endpoint that uses IPv6
|
|
||||||
// transport. It is used to control several IP-level socket options
|
|
||||||
// including IPv6 header manipulation. It also provides datagram
|
|
||||||
// based network I/O methods specific to the IPv6 and higher layer
|
|
||||||
// protocols such as OSPF, GRE, and UDP.
|
|
||||||
type PacketConn struct {
|
|
||||||
genericOpt
|
|
||||||
dgramOpt
|
|
||||||
payloadHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
type dgramOpt struct {
|
|
||||||
net.PacketConn
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
|
|
||||||
|
|
||||||
// SetControlMessage allows to receive the per packet basis IP-level
|
|
||||||
// socket options.
|
|
||||||
func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.payloadHandler.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setControlMessage(fd, &c.payloadHandler.rawOpt, cf, on)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetDeadline sets the read and write deadlines associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.SetDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetReadDeadline sets the read deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetReadDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.SetReadDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetWriteDeadline sets the write deadline associated with the
|
|
||||||
// endpoint.
|
|
||||||
func (c *PacketConn) SetWriteDeadline(t time.Time) error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.SetWriteDeadline(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the endpoint.
|
|
||||||
func (c *PacketConn) Close() error {
|
|
||||||
if !c.payloadHandler.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
return c.payloadHandler.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPacketConn returns a new PacketConn using c as its underlying
|
|
||||||
// transport.
|
|
||||||
func NewPacketConn(c net.PacketConn) *PacketConn {
|
|
||||||
return &PacketConn{
|
|
||||||
genericOpt: genericOpt{Conn: c.(net.Conn)},
|
|
||||||
dgramOpt: dgramOpt{PacketConn: c},
|
|
||||||
payloadHandler: payloadHandler{PacketConn: c},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
241
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/gen.go
generated
vendored
241
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/gen.go
generated
vendored
@@ -1,241 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
// This program generates internet protocol constants and tables by
|
|
||||||
// reading IANA protocol registries.
|
|
||||||
//
|
|
||||||
// Usage:
|
|
||||||
// go run gen.go > iana.go
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/xml"
|
|
||||||
"fmt"
|
|
||||||
"go/format"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
var registries = []struct {
|
|
||||||
url string
|
|
||||||
parse func(io.Writer, io.Reader) error
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml",
|
|
||||||
parseICMPv6Parameters,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml",
|
|
||||||
parseProtocolNumbers,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var bb bytes.Buffer
|
|
||||||
fmt.Fprintf(&bb, "// go run gen.go\n")
|
|
||||||
fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
|
|
||||||
fmt.Fprintf(&bb, "package ipv6\n\n")
|
|
||||||
for _, r := range registries {
|
|
||||||
resp, err := http.Get(r.url)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
|
||||||
fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if err := r.parse(&bb, resp.Body); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&bb, "\n")
|
|
||||||
}
|
|
||||||
b, err := format.Source(bb.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
os.Stdout.Write(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseICMPv6Parameters(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var icp icmpv6Parameters
|
|
||||||
if err := dec.Decode(&icp); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prs := icp.escape()
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Name == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Name, pr.Value)
|
|
||||||
fmt.Fprintf(w, "// %s\n", pr.OrigName)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n\n")
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
|
|
||||||
fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Name == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigName))
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "}\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type icmpv6Parameters struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
Registries []struct {
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Records []struct {
|
|
||||||
Value string `xml:"value"`
|
|
||||||
Name string `xml:"name"`
|
|
||||||
} `xml:"record"`
|
|
||||||
} `xml:"registry"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonICMPv6ParamRecord struct {
|
|
||||||
OrigName string
|
|
||||||
Name string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (icp *icmpv6Parameters) escape() []canonICMPv6ParamRecord {
|
|
||||||
id := -1
|
|
||||||
for i, r := range icp.Registries {
|
|
||||||
if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") {
|
|
||||||
id = i
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if id < 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
prs := make([]canonICMPv6ParamRecord, len(icp.Registries[id].Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"Messages", "",
|
|
||||||
"Message", "",
|
|
||||||
"ICMP", "",
|
|
||||||
"+", "P",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, pr := range icp.Registries[id].Records {
|
|
||||||
if strings.Contains(pr.Name, "Reserved") ||
|
|
||||||
strings.Contains(pr.Name, "Unassigned") ||
|
|
||||||
strings.Contains(pr.Name, "Deprecated") ||
|
|
||||||
strings.Contains(pr.Name, "Experiment") ||
|
|
||||||
strings.Contains(pr.Name, "experiment") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ss := strings.Split(pr.Name, "\n")
|
|
||||||
if len(ss) > 1 {
|
|
||||||
prs[i].Name = strings.Join(ss, " ")
|
|
||||||
} else {
|
|
||||||
prs[i].Name = ss[0]
|
|
||||||
}
|
|
||||||
s := strings.TrimSpace(prs[i].Name)
|
|
||||||
prs[i].OrigName = s
|
|
||||||
prs[i].Name = sr.Replace(s)
|
|
||||||
prs[i].Value, _ = strconv.Atoi(pr.Value)
|
|
||||||
}
|
|
||||||
return prs
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseProtocolNumbers(w io.Writer, r io.Reader) error {
|
|
||||||
dec := xml.NewDecoder(r)
|
|
||||||
var pn protocolNumbers
|
|
||||||
if err := dec.Decode(&pn); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prs := pn.escape()
|
|
||||||
fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated)
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, pr := range prs {
|
|
||||||
if pr.Name == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "ianaProtocol%s = %d", pr.Name, pr.Value)
|
|
||||||
s := pr.Descr
|
|
||||||
if s == "" {
|
|
||||||
s = pr.OrigName
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "// %s\n", s)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, ")\n")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type protocolNumbers struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Title string `xml:"title"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
RegTitle string `xml:"registry>title"`
|
|
||||||
Note string `xml:"registry>note"`
|
|
||||||
Records []struct {
|
|
||||||
Value string `xml:"value"`
|
|
||||||
Name string `xml:"name"`
|
|
||||||
Descr string `xml:"description"`
|
|
||||||
} `xml:"registry>record"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type canonProtocolRecord struct {
|
|
||||||
OrigName string
|
|
||||||
Name string
|
|
||||||
Descr string
|
|
||||||
Value int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pn *protocolNumbers) escape() []canonProtocolRecord {
|
|
||||||
prs := make([]canonProtocolRecord, len(pn.Records))
|
|
||||||
sr := strings.NewReplacer(
|
|
||||||
"-in-", "in",
|
|
||||||
"-within-", "within",
|
|
||||||
"-over-", "over",
|
|
||||||
"+", "P",
|
|
||||||
"-", "",
|
|
||||||
"/", "",
|
|
||||||
".", "",
|
|
||||||
" ", "",
|
|
||||||
)
|
|
||||||
for i, pr := range pn.Records {
|
|
||||||
prs[i].OrigName = pr.Name
|
|
||||||
s := strings.TrimSpace(pr.Name)
|
|
||||||
switch pr.Name {
|
|
||||||
case "ISIS over IPv4":
|
|
||||||
prs[i].Name = "ISIS"
|
|
||||||
case "manet":
|
|
||||||
prs[i].Name = "MANET"
|
|
||||||
default:
|
|
||||||
prs[i].Name = sr.Replace(s)
|
|
||||||
}
|
|
||||||
ss := strings.Split(pr.Descr, "\n")
|
|
||||||
for i := range ss {
|
|
||||||
ss[i] = strings.TrimSpace(ss[i])
|
|
||||||
}
|
|
||||||
if len(ss) > 1 {
|
|
||||||
prs[i].Descr = strings.Join(ss, " ")
|
|
||||||
} else {
|
|
||||||
prs[i].Descr = ss[0]
|
|
||||||
}
|
|
||||||
prs[i].Value, _ = strconv.Atoi(pr.Value)
|
|
||||||
}
|
|
||||||
return prs
|
|
||||||
}
|
|
||||||
60
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/genericopt_posix.go
generated
vendored
60
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/genericopt_posix.go
generated
vendored
@@ -1,60 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build darwin dragonfly freebsd linux netbsd openbsd windows
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// TrafficClass returns the traffic class field value for outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) TrafficClass() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return ipv6TrafficClass(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetTrafficClass sets the traffic class field value for future
|
|
||||||
// outgoing packets.
|
|
||||||
func (c *genericOpt) SetTrafficClass(tclass int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6TrafficClass(fd, tclass)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HopLimit returns the hop limit field value for outgoing packets.
|
|
||||||
func (c *genericOpt) HopLimit() (int, error) {
|
|
||||||
if !c.ok() {
|
|
||||||
return 0, syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return ipv6HopLimit(fd)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetHopLimit sets the hop limit field value for future outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) SetHopLimit(hoplim int) error {
|
|
||||||
if !c.ok() {
|
|
||||||
return syscall.EINVAL
|
|
||||||
}
|
|
||||||
fd, err := c.sysfd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return setIPv6HopLimit(fd, hoplim)
|
|
||||||
}
|
|
||||||
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/genericopt_stub.go
generated
vendored
34
alpine/packages/mdnstool/vendor/github.com/hashicorp/go.net/ipv6/genericopt_stub.go
generated
vendored
@@ -1,34 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build nacl plan9 solaris
|
|
||||||
|
|
||||||
package ipv6
|
|
||||||
|
|
||||||
// TrafficClass returns the traffic class field value for outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) TrafficClass() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetTrafficClass sets the traffic class field value for future
|
|
||||||
// outgoing packets.
|
|
||||||
func (c *genericOpt) SetTrafficClass(tclass int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// HopLimit returns the hop limit field value for outgoing packets.
|
|
||||||
func (c *genericOpt) HopLimit() (int, error) {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return 0, errOpNoSupport
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetHopLimit sets the hop limit field value for future outgoing
|
|
||||||
// packets.
|
|
||||||
func (c *genericOpt) SetHopLimit(hoplim int) error {
|
|
||||||
// TODO(mikio): Implement this
|
|
||||||
return errOpNoSupport
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user