本文整理匯總了Golang中golang.org/x/net/ipv6.ControlMessage.Dst方法的典型用法代碼示例。如果您正苦於以下問題:Golang ControlMessage.Dst方法的具體用法?Golang ControlMessage.Dst怎麽用?Golang ControlMessage.Dst使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類golang.org/x/net/ipv6.ControlMessage
的用法示例。
在下文中一共展示了ControlMessage.Dst方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: sendRA
func (s *Server) sendRA(src net.Addr) {
var srcIP net.IP
var ipAddr net.Addr
iface, err := net.InterfaceByName("tap" + s.name)
if err != nil {
return
}
addrs, err := iface.Addrs()
if err != nil {
l.Info("can't get addresses from " + iface.Name + " " + err.Error())
return
}
for _, addr := range addrs {
ip, _, err := net.ParseCIDR(addr.String())
if err != nil {
l.Info(err.Error())
continue
}
if ip.To4() == nil && strings.HasPrefix(addr.String(), "fe80") {
srcIP = ip
if src == nil {
ipAddr = net.Addr(&net.IPAddr{IP: net.IPv6linklocalallnodes, Zone: "tap" + s.name})
} else {
ipAddr = src
}
break
}
}
if ipAddr == nil || srcIP == nil {
l.Info(fmt.Sprintf("ipv6 add missing for tap %s %s", s.name, srcIP))
return
}
res, err := s.ServeICMPv6(srcIP, &ICMPv6{Type: uint8(ipv6.ICMPTypeRouterSolicitation)})
if err != nil {
l.Info(err.Error())
return
}
for _, msg := range res {
buf := make([]byte, msg.Len())
buf, err = msg.Marshal()
if err != nil {
l.Info(fmt.Sprintf("%s err %s", s.name, err.Error()))
continue
}
wcm := ipv6.ControlMessage{HopLimit: 255}
wcm.Dst = net.IPv6linklocalallnodes
wcm.IfIndex = iface.Index
if _, err = s.ipv6conn.WriteTo(buf, &wcm, ipAddr); err != nil {
l.Info(fmt.Sprintf("%s err %s", s.name, err.Error()))
continue
}
}
}