LCOV - code coverage report
Current view: top level - mptcp/mib.h (source / functions) Coverage Total Hit
Test: export-net Lines: 84.6 % 13 11
Test Date: 2024-11-27 06:48:25 Functions: 100.0 % 1 1
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 52.2 % 90 47

             Branch data     Line data    Source code
       1                 :             : /* SPDX-License-Identifier: GPL-2.0-or-later */
       2                 :             : 
       3                 :             : #include <net/inet_common.h>
       4                 :             : 
       5                 :             : enum linux_mptcp_mib_field {
       6                 :             :         MPTCP_MIB_NUM = 0,
       7                 :             :         MPTCP_MIB_MPCAPABLEPASSIVE,     /* Received SYN with MP_CAPABLE */
       8                 :             :         MPTCP_MIB_MPCAPABLEACTIVE,      /* Sent SYN with MP_CAPABLE */
       9                 :             :         MPTCP_MIB_MPCAPABLEACTIVEACK,   /* Received SYN/ACK with MP_CAPABLE */
      10                 :             :         MPTCP_MIB_MPCAPABLEPASSIVEACK,  /* Received third ACK with MP_CAPABLE */
      11                 :             :         MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK,/* Server-side fallback during 3-way handshake */
      12                 :             :         MPTCP_MIB_MPCAPABLEACTIVEFALLBACK, /* Client-side fallback during 3-way handshake */
      13                 :             :         MPTCP_MIB_MPCAPABLEACTIVEDROP,  /* Client-side fallback due to a MPC drop */
      14                 :             :         MPTCP_MIB_MPCAPABLEACTIVEDISABLED, /* Client-side disabled due to past issues */
      15                 :             :         MPTCP_MIB_MPCAPABLEENDPATTEMPT, /* Prohibited MPC to port-based endp */
      16                 :             :         MPTCP_MIB_TOKENFALLBACKINIT,    /* Could not init/allocate token */
      17                 :             :         MPTCP_MIB_RETRANSSEGS,          /* Segments retransmitted at the MPTCP-level */
      18                 :             :         MPTCP_MIB_JOINNOTOKEN,          /* Received MP_JOIN but the token was not found */
      19                 :             :         MPTCP_MIB_JOINSYNRX,            /* Received a SYN + MP_JOIN */
      20                 :             :         MPTCP_MIB_JOINSYNBACKUPRX,      /* Received a SYN + MP_JOIN + backup flag */
      21                 :             :         MPTCP_MIB_JOINSYNACKRX,         /* Received a SYN/ACK + MP_JOIN */
      22                 :             :         MPTCP_MIB_JOINSYNACKBACKUPRX,   /* Received a SYN/ACK + MP_JOIN + backup flag */
      23                 :             :         MPTCP_MIB_JOINSYNACKMAC,        /* HMAC was wrong on SYN/ACK + MP_JOIN */
      24                 :             :         MPTCP_MIB_JOINACKRX,            /* Received an ACK + MP_JOIN */
      25                 :             :         MPTCP_MIB_JOINACKMAC,           /* HMAC was wrong on ACK + MP_JOIN */
      26                 :             :         MPTCP_MIB_JOINSYNTX,            /* Sending a SYN + MP_JOIN */
      27                 :             :         MPTCP_MIB_JOINSYNTXCREATSKERR,  /* Not able to create a socket when sending a SYN + MP_JOIN */
      28                 :             :         MPTCP_MIB_JOINSYNTXBINDERR,     /* Not able to bind() the address when sending a SYN + MP_JOIN */
      29                 :             :         MPTCP_MIB_JOINSYNTXCONNECTERR,  /* Not able to connect() when sending a SYN + MP_JOIN */
      30                 :             :         MPTCP_MIB_DSSNOMATCH,           /* Received a new mapping that did not match the previous one */
      31                 :             :         MPTCP_MIB_DSSCORRUPTIONFALLBACK,/* DSS corruption detected, fallback */
      32                 :             :         MPTCP_MIB_DSSCORRUPTIONRESET,   /* DSS corruption detected, MPJ subflow reset */
      33                 :             :         MPTCP_MIB_INFINITEMAPTX,        /* Sent an infinite mapping */
      34                 :             :         MPTCP_MIB_INFINITEMAPRX,        /* Received an infinite mapping */
      35                 :             :         MPTCP_MIB_DSSTCPMISMATCH,       /* DSS-mapping did not map with TCP's sequence numbers */
      36                 :             :         MPTCP_MIB_DATACSUMERR,          /* The data checksum fail */
      37                 :             :         MPTCP_MIB_OFOQUEUETAIL, /* Segments inserted into OoO queue tail */
      38                 :             :         MPTCP_MIB_OFOQUEUE,             /* Segments inserted into OoO queue */
      39                 :             :         MPTCP_MIB_OFOMERGE,             /* Segments merged in OoO queue */
      40                 :             :         MPTCP_MIB_NODSSWINDOW,          /* Segments not in MPTCP windows */
      41                 :             :         MPTCP_MIB_DUPDATA,              /* Segments discarded due to duplicate DSS */
      42                 :             :         MPTCP_MIB_ADDADDR,              /* Received ADD_ADDR with echo-flag=0 */
      43                 :             :         MPTCP_MIB_ADDADDRTX,            /* Sent ADD_ADDR with echo-flag=0 */
      44                 :             :         MPTCP_MIB_ADDADDRTXDROP,        /* ADD_ADDR with echo-flag=0 not send due to
      45                 :             :                                          * resource exhaustion
      46                 :             :                                          */
      47                 :             :         MPTCP_MIB_ECHOADD,              /* Received ADD_ADDR with echo-flag=1 */
      48                 :             :         MPTCP_MIB_ECHOADDTX,            /* Send ADD_ADDR with echo-flag=1 */
      49                 :             :         MPTCP_MIB_ECHOADDTXDROP,        /* ADD_ADDR with echo-flag=1 not send due
      50                 :             :                                          * to resource exhaustion
      51                 :             :                                          */
      52                 :             :         MPTCP_MIB_PORTADD,              /* Received ADD_ADDR with a port-number */
      53                 :             :         MPTCP_MIB_ADDADDRDROP,          /* Dropped incoming ADD_ADDR */
      54                 :             :         MPTCP_MIB_JOINPORTSYNRX,        /* Received a SYN MP_JOIN with a different port-number */
      55                 :             :         MPTCP_MIB_JOINPORTSYNACKRX,     /* Received a SYNACK MP_JOIN with a different port-number */
      56                 :             :         MPTCP_MIB_JOINPORTACKRX,        /* Received an ACK MP_JOIN with a different port-number */
      57                 :             :         MPTCP_MIB_MISMATCHPORTSYNRX,    /* Received a SYN MP_JOIN with a mismatched port-number */
      58                 :             :         MPTCP_MIB_MISMATCHPORTACKRX,    /* Received an ACK MP_JOIN with a mismatched port-number */
      59                 :             :         MPTCP_MIB_RMADDR,               /* Received RM_ADDR */
      60                 :             :         MPTCP_MIB_RMADDRDROP,           /* Dropped incoming RM_ADDR */
      61                 :             :         MPTCP_MIB_RMADDRTX,             /* Sent RM_ADDR */
      62                 :             :         MPTCP_MIB_RMADDRTXDROP,         /* RM_ADDR not sent due to resource exhaustion */
      63                 :             :         MPTCP_MIB_RMSUBFLOW,            /* Remove a subflow */
      64                 :             :         MPTCP_MIB_MPPRIOTX,             /* Transmit a MP_PRIO */
      65                 :             :         MPTCP_MIB_MPPRIORX,             /* Received a MP_PRIO */
      66                 :             :         MPTCP_MIB_MPFAILTX,             /* Transmit a MP_FAIL */
      67                 :             :         MPTCP_MIB_MPFAILRX,             /* Received a MP_FAIL */
      68                 :             :         MPTCP_MIB_MPFASTCLOSETX,        /* Transmit a MP_FASTCLOSE */
      69                 :             :         MPTCP_MIB_MPFASTCLOSERX,        /* Received a MP_FASTCLOSE */
      70                 :             :         MPTCP_MIB_MPRSTTX,              /* Transmit a MP_RST */
      71                 :             :         MPTCP_MIB_MPRSTRX,              /* Received a MP_RST */
      72                 :             :         MPTCP_MIB_RCVPRUNED,            /* Incoming packet dropped due to memory limit */
      73                 :             :         MPTCP_MIB_SUBFLOWSTALE,         /* Subflows entered 'stale' status */
      74                 :             :         MPTCP_MIB_SUBFLOWRECOVER,       /* Subflows returned to active status after being stale */
      75                 :             :         MPTCP_MIB_SNDWNDSHARED,         /* Subflow snd wnd is overridden by msk's one */
      76                 :             :         MPTCP_MIB_RCVWNDSHARED,         /* Subflow rcv wnd is overridden by msk's one */
      77                 :             :         MPTCP_MIB_RCVWNDCONFLICTUPDATE, /* subflow rcv wnd is overridden by msk's one due to
      78                 :             :                                          * conflict with another subflow while updating msk rcv wnd
      79                 :             :                                          */
      80                 :             :         MPTCP_MIB_RCVWNDCONFLICT,       /* Conflict with while updating msk rcv wnd */
      81                 :             :         MPTCP_MIB_CURRESTAB,            /* Current established MPTCP connections */
      82                 :             :         MPTCP_MIB_BLACKHOLE,            /* A blackhole has been detected */
      83                 :             :         __MPTCP_MIB_MAX
      84                 :             : };
      85                 :             : 
      86                 :             : #define LINUX_MIB_MPTCP_MAX     __MPTCP_MIB_MAX
      87                 :             : struct mptcp_mib {
      88                 :             :         unsigned long mibs[LINUX_MIB_MPTCP_MAX];
      89                 :             : };
      90                 :             : 
      91                 :         106 : static inline void MPTCP_ADD_STATS(struct net *net,
      92                 :             :                                    enum linux_mptcp_mib_field field,
      93                 :             :                                    int val)
      94                 :             : {
      95         [ +  - ]:         106 :         if (likely(net->mib.mptcp_statistics))
      96   [ -  +  -  -  :         106 :                 SNMP_ADD_STATS(net->mib.mptcp_statistics, field, val);
             -  -  -  + ]
      97                 :         106 : }
      98                 :             : 
      99                 :           0 : static inline void MPTCP_INC_STATS(struct net *net,
     100                 :             :                                    enum linux_mptcp_mib_field field)
     101                 :             : {
     102   [ +  -  +  -  :      291121 :         if (likely(net->mib.mptcp_statistics))
          +  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          +  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  -  -  -  
          -  -  -  +  -  
             +  -  +  - ]
     103   [ -  +  +  +  :      242116 :                 SNMP_INC_STATS(net->mib.mptcp_statistics, field);
          +  +  -  +  +  
             +  +  +  +  
                      + ]
     104                 :             : }
     105                 :             : 
     106                 :           0 : static inline void __MPTCP_INC_STATS(struct net *net,
     107                 :             :                                      enum linux_mptcp_mib_field field)
     108                 :             : {
     109   [ -  +  +  -  :         213 :         if (likely(net->mib.mptcp_statistics))
                   +  - ]
     110                 :         204 :                 __SNMP_INC_STATS(net->mib.mptcp_statistics, field);
     111                 :             : }
     112                 :             : 
     113                 :          42 : static inline void MPTCP_DEC_STATS(struct net *net,
     114                 :             :                                    enum linux_mptcp_mib_field field)
     115                 :             : {
     116         [ +  - ]:        2280 :         if (likely(net->mib.mptcp_statistics))
     117                 :        2280 :                 SNMP_DEC_STATS(net->mib.mptcp_statistics, field);
     118                 :             : }
     119                 :             : 
     120                 :             : bool mptcp_mib_alloc(struct net *net);
        

Generated by: LCOV version 2.0-1