1 /*- 2 * Copyright (c) 2020, Ryan Moeller <freqlabs@FreeBSD.org> 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * 25 * $FreeBSD$ 26 */ 27 28 {# THIS IS A TEMPLATE PROCESSED BY lib/libifconfig/sfp.lua #} 29 30 #pragma once 31 32 #include <stdint.h> 33 34 {% 35 for _, ent in ipairs(enums) do 36 if type(ent) == "string" then 37 %} 38 /* 39 * {*ent*} 40 */ 41 42 {% 43 else 44 local enum = ent 45 local name = "sfp_"..enum.name 46 local num, sym, desc, disp 47 %} 48 /** {*enum.description*} */ 49 enum {*name*} { 50 {% 51 for _, item in ipairs(enum.values) do 52 val, sym, desc, disp = table.unpack(item) 53 local symbol = string.upper(name).."_"..sym 54 %} 55 {*symbol*} = {*val*}, /**< {*desc*} */ 56 {% 57 end 58 %} 59 }; 60 61 /** Get the symbolic name of a given {*name*} value */ 62 const char *ifconfig_{*name*}_symbol(enum {*name*}); 63 64 /** Get a brief description of a given {*name*} value */ 65 const char *ifconfig_{*name*}_description(enum {*name*}); 66 67 {% 68 if disp then 69 %} 70 /** Get a shortened user-friendly display name for a given {*name*} value */ 71 const char *ifconfig_{*name*}_display(enum {*name*}); 72 73 {% 74 end 75 end 76 end 77 %} 78 /* 79 * Descriptions of each enum 80 */ 81 82 {% 83 for _, ent in ipairs(enums) do 84 if type(ent) == "table" then 85 local enum = ent 86 local name = "sfp_"..enum.name 87 %} 88 /** Get a brief description of the {*name*} enum */ 89 static inline const char * 90 ifconfig_enum_{*name*}_description(void) 91 { 92 return ("{*enum.description*}"); 93 } 94 95 {% 96 end 97 end 98 %} 99 /* 100 * Info struct definitions 101 */ 102 103 struct ifconfig_sfp_info { 104 {% 105 for _, ent in ipairs(enums) do 106 if type(ent) == "table" then 107 local enum = ent 108 local name = "sfp_"..enum.name 109 local t = string.format("uint%d_t", enum.bits) 110 %} 111 {*t*} {*name*}; /**< {*enum.description*} */ 112 {% 113 end 114 end 115 %} 116 }; 117 118 struct ifconfig_sfp_info_strings { 119 {% 120 for _, ent in ipairs(enums) do 121 if type(ent) == "table" then 122 local enum = ent 123 local name = "sfp_"..enum.name 124 %} 125 const char *{*name*}; /**< {*enum.description*} */ 126 {% 127 end 128 end 129 %} 130 }; 131