LCOV - code coverage report
Current view: top level - vnet/ethernet - mac_address.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 24 26 92.3 %
Date: 2023-07-05 22:20:52 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2018 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : 
      16             : #include <vnet/ethernet/mac_address.h>
      17             : 
      18             : /* *INDENT-OFF* */
      19             : const mac_address_t ZERO_MAC_ADDRESS = {
      20             :   .bytes = {
      21             :     0, 0, 0, 0, 0, 0,
      22             :   },
      23             : };
      24             : /* *INDENT-ON* */
      25             : 
      26             : u8 *
      27       39805 : format_mac_address_t (u8 * s, va_list * args)
      28             : {
      29       39805 :   const mac_address_t *mac = va_arg (*args, mac_address_t *);
      30             : 
      31       79610 :   return format (s, "%02x:%02x:%02x:%02x:%02x:%02x",
      32       39805 :                  mac->bytes[0], mac->bytes[1], mac->bytes[2],
      33       39805 :                  mac->bytes[3], mac->bytes[4], mac->bytes[5]);
      34             : }
      35             : 
      36             : uword
      37           4 : unformat_mac_address_t (unformat_input_t * input, va_list * args)
      38             : {
      39           4 :   mac_address_t *mac = va_arg (*args, mac_address_t *);
      40             :   u32 i, a[3];
      41             : 
      42           4 :   if (unformat (input, "%_%X:%X:%X:%X:%X:%X%_",
      43             :                 1, &mac->bytes[0], 1, &mac->bytes[1], 1, &mac->bytes[2],
      44             :                 1, &mac->bytes[3], 1, &mac->bytes[4], 1, &mac->bytes[5]))
      45           2 :     return (1);
      46           2 :   else if (unformat (input, "%_%x.%x.%x%_", &a[0], &a[1], &a[2]))
      47             :     {
      48           8 :       for (i = 0; i < ARRAY_LEN (a); i++)
      49           6 :         if (a[i] >= (1 << 16))
      50           0 :           return 0;
      51             : 
      52           2 :       mac->bytes[0] = (a[0] >> 8) & 0xff;
      53           2 :       mac->bytes[1] = (a[0] >> 0) & 0xff;
      54           2 :       mac->bytes[2] = (a[1] >> 8) & 0xff;
      55           2 :       mac->bytes[3] = (a[1] >> 0) & 0xff;
      56           2 :       mac->bytes[4] = (a[2] >> 8) & 0xff;
      57           2 :       mac->bytes[5] = (a[2] >> 0) & 0xff;
      58             : 
      59           2 :       return (1);
      60             :     }
      61           0 :   return (0);
      62             : }
      63             : 
      64             : void
      65           4 : mac_address_increment (mac_address_t * mac)
      66             : {
      67             :   u64 a;
      68             : 
      69           4 :   a = ethernet_mac_address_u64 (mac->bytes);
      70           4 :   a++;
      71           4 :   ethernet_mac_address_from_u64 (a, mac->bytes);
      72           4 : }
      73             : 
      74             : /*
      75             :  * fd.io coding-style-patch-verification: ON
      76             :  *
      77             :  * Local Variables:
      78             :  * eval: (c-set-style "gnu")
      79             :  * End:
      80             :  */

Generated by: LCOV version 1.14