1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build solaris 6 7// Package lif provides basic functions for the manipulation of 8// logical network interfaces and interface addresses on Solaris. 9// 10// The package supports Solaris 11 or above. 11package lif 12 13import "syscall" 14 15type endpoint struct { 16 af int 17 s uintptr 18} 19 20func (ep *endpoint) close() error { 21 return syscall.Close(int(ep.s)) 22} 23 24func newEndpoints(af int) ([]endpoint, error) { 25 var lastErr error 26 var eps []endpoint 27 afs := []int{sysAF_INET, sysAF_INET6} 28 if af != sysAF_UNSPEC { 29 afs = []int{af} 30 } 31 for _, af := range afs { 32 s, err := syscall.Socket(af, sysSOCK_DGRAM, 0) 33 if err != nil { 34 lastErr = err 35 continue 36 } 37 eps = append(eps, endpoint{af: af, s: uintptr(s)}) 38 } 39 if len(eps) == 0 { 40 return nil, lastErr 41 } 42 return eps, nil 43} 44