addr_linux.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package nl
  2. import (
  3. "syscall"
  4. "unsafe"
  5. )
  6. type IfAddrmsg struct {
  7. syscall.IfAddrmsg
  8. }
  9. func NewIfAddrmsg(family int) *IfAddrmsg {
  10. return &IfAddrmsg{
  11. IfAddrmsg: syscall.IfAddrmsg{
  12. Family: uint8(family),
  13. },
  14. }
  15. }
  16. // struct ifaddrmsg {
  17. // __u8 ifa_family;
  18. // __u8 ifa_prefixlen; /* The prefix length */
  19. // __u8 ifa_flags; /* Flags */
  20. // __u8 ifa_scope; /* Address scope */
  21. // __u32 ifa_index; /* Link index */
  22. // };
  23. // type IfAddrmsg struct {
  24. // Family uint8
  25. // Prefixlen uint8
  26. // Flags uint8
  27. // Scope uint8
  28. // Index uint32
  29. // }
  30. // SizeofIfAddrmsg = 0x8
  31. func DeserializeIfAddrmsg(b []byte) *IfAddrmsg {
  32. return (*IfAddrmsg)(unsafe.Pointer(&b[0:syscall.SizeofIfAddrmsg][0]))
  33. }
  34. func (msg *IfAddrmsg) Serialize() []byte {
  35. return (*(*[syscall.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]
  36. }
  37. func (msg *IfAddrmsg) Len() int {
  38. return syscall.SizeofIfAddrmsg
  39. }
  40. // struct ifa_cacheinfo {
  41. // __u32 ifa_prefered;
  42. // __u32 ifa_valid;
  43. // __u32 cstamp; /* created timestamp, hundredths of seconds */
  44. // __u32 tstamp; /* updated timestamp, hundredths of seconds */
  45. // };
  46. const IFA_CACHEINFO = 6
  47. const SizeofIfaCacheInfo = 0x10
  48. type IfaCacheInfo struct {
  49. IfaPrefered uint32
  50. IfaValid uint32
  51. Cstamp uint32
  52. Tstamp uint32
  53. }
  54. func (msg *IfaCacheInfo) Len() int {
  55. return SizeofIfaCacheInfo
  56. }
  57. func DeserializeIfaCacheInfo(b []byte) *IfaCacheInfo {
  58. return (*IfaCacheInfo)(unsafe.Pointer(&b[0:SizeofIfaCacheInfo][0]))
  59. }
  60. func (msg *IfaCacheInfo) Serialize() []byte {
  61. return (*(*[SizeofIfaCacheInfo]byte)(unsafe.Pointer(msg)))[:]
  62. }