in pkg/tcp_metrics/inetdiag/inetdiag.go [143:171]
func ProcessMessage(m *syscall.NetlinkMessage, seq uint32, pid uint32) (msg *syscall.NetlinkMessage, shouldContinue bool, err error) {
if m.Header.Seq != seq {
fmt.Printf("Wrong Seq nr %d, expected %d", m.Header.Seq, seq)
return nil, false, ErrBadSequence
}
if m.Header.Pid != pid {
fmt.Printf("Wrong pid %d, expected %d", m.Header.Pid, pid)
return nil, false, ErrBadPid
}
if m.Header.Type == unix.NLMSG_DONE {
return nil, false, nil
}
if m.Header.Type == unix.NLMSG_ERROR {
native := nl.NativeEndian()
if len(m.Data) < 4 {
return nil, false, ErrBadMsgData
}
error := int32(native.Uint32(m.Data[0:4]))
if error == 0 {
return nil, false, nil
}
fmt.Println(syscall.Errno(-error))
}
if m.Header.Flags&unix.NLM_F_MULTI == 0 {
return m, false, nil
}
return m, true, nil
}