23
									
								
								vendor/github.com/vishvananda/netlink/addr_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/vishvananda/netlink/addr_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -176,7 +176,7 @@ func AddrList(link Link, family int) ([]Addr, error) { | ||||
| // The list can be filtered by link and ip family. | ||||
| func (h *Handle) AddrList(link Link, family int) ([]Addr, error) { | ||||
| 	req := h.newNetlinkRequest(unix.RTM_GETADDR, unix.NLM_F_DUMP) | ||||
| 	msg := nl.NewIfInfomsg(family) | ||||
| 	msg := nl.NewIfAddrmsg(family) | ||||
| 	req.AddData(msg) | ||||
|  | ||||
| 	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWADDR) | ||||
| @@ -268,7 +268,7 @@ func parseAddr(m []byte) (addr Addr, family int, err error) { | ||||
| 	// But obviously, as there are IPv6 PtP addresses, too, | ||||
| 	// IFA_LOCAL should also be handled for IPv6. | ||||
| 	if local != nil { | ||||
| 		if family == FAMILY_V4 && local.IP.Equal(dst.IP) { | ||||
| 		if family == FAMILY_V4 && dst != nil && local.IP.Equal(dst.IP) { | ||||
| 			addr.IPNet = dst | ||||
| 		} else { | ||||
| 			addr.IPNet = local | ||||
| @@ -296,13 +296,13 @@ type AddrUpdate struct { | ||||
| // AddrSubscribe takes a chan down which notifications will be sent | ||||
| // when addresses change.  Close the 'done' chan to stop subscription. | ||||
| func AddrSubscribe(ch chan<- AddrUpdate, done <-chan struct{}) error { | ||||
| 	return addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0) | ||||
| 	return addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil) | ||||
| } | ||||
|  | ||||
| // AddrSubscribeAt works like AddrSubscribe plus it allows the caller | ||||
| // to choose the network namespace in which to subscribe (ns). | ||||
| func AddrSubscribeAt(ns netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error { | ||||
| 	return addrSubscribeAt(ns, netns.None(), ch, done, nil, false, 0) | ||||
| 	return addrSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil) | ||||
| } | ||||
|  | ||||
| // AddrSubscribeOptions contains a set of options to use with | ||||
| @@ -312,6 +312,7 @@ type AddrSubscribeOptions struct { | ||||
| 	ErrorCallback     func(error) | ||||
| 	ListExisting      bool | ||||
| 	ReceiveBufferSize int | ||||
| 	ReceiveTimeout    *unix.Timeval | ||||
| } | ||||
|  | ||||
| // AddrSubscribeWithOptions work like AddrSubscribe but enable to | ||||
| @@ -322,14 +323,20 @@ func AddrSubscribeWithOptions(ch chan<- AddrUpdate, done <-chan struct{}, option | ||||
| 		none := netns.None() | ||||
| 		options.Namespace = &none | ||||
| 	} | ||||
| 	return addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting, options.ReceiveBufferSize) | ||||
| 	return addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting, options.ReceiveBufferSize, options.ReceiveTimeout) | ||||
| } | ||||
|  | ||||
| func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool, rcvbuf int) error { | ||||
| func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool, rcvbuf int, rcvTimeout *unix.Timeval) error { | ||||
| 	s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_IFADDR, unix.RTNLGRP_IPV6_IFADDR) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if rcvTimeout != nil { | ||||
| 		if err := s.SetReceiveTimeout(rcvTimeout); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if done != nil { | ||||
| 		go func() { | ||||
| 			<-done | ||||
| @@ -357,7 +364,8 @@ func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-c | ||||
| 			msgs, from, err := s.Receive() | ||||
| 			if err != nil { | ||||
| 				if cberr != nil { | ||||
| 					cberr(err) | ||||
| 					cberr(fmt.Errorf("Receive failed: %v", | ||||
| 						err)) | ||||
| 				} | ||||
| 				return | ||||
| 			} | ||||
| @@ -372,7 +380,6 @@ func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-c | ||||
| 					continue | ||||
| 				} | ||||
| 				if m.Header.Type == unix.NLMSG_ERROR { | ||||
| 					native := nl.NativeEndian() | ||||
| 					error := int32(native.Uint32(m.Data[0:4])) | ||||
| 					if error == 0 { | ||||
| 						continue | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Aditi
					Aditi