back to topotato report
topotato coverage report
Current view: top level - lib - tc.c (source / functions) Hit Total Coverage
Test: test_bgp_ecmp_enhe.py::BGP_Unnumbered_ECMP Lines: 0 30 0.0 %
Date: 2023-11-16 17:19:14 Functions: 0 2 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : /*
       3             :  * Traffic Control (TC) main library
       4             :  * Copyright (C) 2022  Shichu Yang
       5             :  */
       6             : 
       7             : #include "tc.h"
       8             : 
       9           0 : int tc_getrate(const char *str, uint64_t *rate)
      10             : {
      11           0 :         char *endp;
      12           0 :         uint64_t raw = strtoull(str, &endp, 10);
      13             : 
      14           0 :         if (endp == str)
      15             :                 return -1;
      16             : 
      17             :         /* if the string only contains a number, it must be valid rate (bps) */
      18           0 :         bool valid = (*endp == '\0');
      19             : 
      20           0 :         const char *p = endp;
      21           0 :         bool bytes = false, binary_base = false;
      22           0 :         int power = 0;
      23             : 
      24           0 :         while (*p) {
      25           0 :                 if (strcmp(p, "Bps") == 0) {
      26             :                         bytes = true;
      27             :                         valid = true;
      28             :                         break;
      29           0 :                 } else if (strcmp(p, "bit") == 0) {
      30             :                         valid = true;
      31             :                         break;
      32             :                 }
      33           0 :                 switch (*p) {
      34             :                 case 'k':
      35             :                 case 'K':
      36             :                         power = 1;
      37             :                         break;
      38           0 :                 case 'm':
      39             :                 case 'M':
      40           0 :                         power = 2;
      41           0 :                         break;
      42           0 :                 case 'g':
      43             :                 case 'G':
      44           0 :                         power = 3;
      45           0 :                         break;
      46           0 :                 case 't':
      47             :                 case 'T':
      48           0 :                         power = 4;
      49           0 :                         break;
      50           0 :                 case 'i':
      51             :                 case 'I':
      52           0 :                         if (power != 0)
      53             :                                 binary_base = true;
      54             :                         else
      55             :                                 return -1;
      56             :                         break;
      57             :                 default:
      58             :                         return -1;
      59             :                 }
      60           0 :                 p++;
      61             :         }
      62             : 
      63           0 :         if (!valid)
      64             :                 return -1;
      65             : 
      66           0 :         for (int i = 0; i < power; i++)
      67           0 :                 raw *= binary_base ? 1024ULL : 1000ULL;
      68             : 
      69           0 :         if (bytes)
      70           0 :                 *rate = raw;
      71             :         else
      72           0 :                 *rate = raw / 8ULL;
      73             : 
      74             :         return 0;
      75             : }

Generated by: LCOV version v1.16-topotato