Subject: Re: UDP-Lite and /proc/net/snmp

From: Eric Dumazet <[email-masked]>
Date: Sat, 10 Nov 2007 16:16:41 +0100

Eric Dumazet a écrit :
> Herbert Xu a écrit :
>> On Sat, Nov 10, 2007 at 11:48:54PM +0900, YOSHIFUJI Hideaki / 吉藤英明 
>> wrote:
>>> Hmm..... "netstat -s" from etch (i386) and etch (x86_64) work
>>> fine for me.  Same version, same architecture.  Strange...
>>
>> Interesting.  What does your /proc/net/snmp file look like?
>> And what does netstat -s actually produce?
>>
>> Thanks,
> 
> Quite easy :)
> 
> A failing one is > 1024 bytes :
> 
> Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors 
> ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests 
> OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails 
> FragOKs FragFails FragCreates
> Ip: 2 64 6954137412 0 23489 0 125 0 6790615249 6423886499 2706 0 13881 
> 164999330 1503683 34165124 1219558 188 54871924
> Icmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs 
> InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps 
> InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs 
> OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos 
> OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps
> Icmp: 6392743 1256162 3894707 401904 83 20702 172602 1415531 0 3 0 3 0 
> 106773069 0 3894707 401904 83 20702 172602 1415531 0 3 0 3 0
> IcmpMsg: InType3 InType4 InType5 InType8 InType11 InType12 InType13 
> InType17 OutType0 OutType3 OutType11 OutType14
> IcmpMsg: 3894707 20702 172602 1415531 401904 83 3 3 1414557 105347007 
> 11502 3
> Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens 
> AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs 
> OutRsts
> Tcp: 1 200 120000 -1 62967275 66063269 17969333 24912734 1278435 
> 6041838336 5717892916 279078174 361708 35913131
> Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
> Udp: 640604836 101598293 193394 421746699 133903 0
> UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors 
> SndbufErrors
> UdpLite: 0 0 0 0 0 0
> 
> 
> So netstat fails because line 344 in statistics.c :
> 
> buf1=TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed 
> EmbryonicRsts PruneCalled RcvPruned OfoPruned OutOfWindowIcmps 
> LockDroppedIcmps ArpFilter TW TWRecycled TWKilled PAWSPassive PAWSActive 
> PAWSEstab DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows 
> ListenDrops TCPPrequeued TCPDirectCopyFromBacklog 
> TCPDirectCopyFromPrequeue TCPPrequeueDropped TCPHPHits TCPHPHitsToUser 
> TCPPureAcks TCPHPAcks TCPRenoRecovery TCPSackRecovery TCPSACKReneging 
> TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder TCPFullUndo 
> TCPPartialUndo TCPDSACKUndo TCPLossUndo TCPLoss TCPLostRetransmit 
> TCPRenoFailures TCPSackFailures TCPLossFailures TCPFastRetrans 
> TCPForwardRetrans TCPSlowStartRetrans TCPTimeouts TCPRenoRecoveryFail 
> TCPSackRecoveryFail TCPSchedulerFailed TCPRcvCollapsed TCPDSACKOldSent 
> TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv TCPAbortOnSyn 
> TCPAbortOnData TCPAbortOnClose TCPAbortOnMemory TCPAbortOnTimeout 
> TCPAbortOnLinger TCPAbortFailed TCPMemoryPressures TCPSACKDiscard 
> TCPDSACKIgnoredOld TCPDSACKIgnoredNoUndo buf2= TCPSpuriousRTOs
> 
> 
> So this is an existing kernel bug, not related to UDPlite

I meant a netstat bug of course, sorry :(

It fails to parse /proc/net/netstat , because TcpExt line is bigger than 1024 
chars.

To correct it, we might enlarge buf1[] and buf2[] from 1024 to 2048 in 
statistics.c, process_fd() function.