\doxysection{command.\+h}
\label{command_8h_source}\index{include/osmocom/vty/command.h@{include/osmocom/vty/command.h}}
\textbf{ Go to the documentation of this file.}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 }
\DoxyCodeLine{3 \textcolor{comment}{/*}}
\DoxyCodeLine{4 \textcolor{comment}{ * Copyright (C) 1997, 98 Kunihiro Ishiguro}}
\DoxyCodeLine{5 \textcolor{comment}{ *}}
\DoxyCodeLine{6 \textcolor{comment}{ * This file is part of GNU Zebra.}}
\DoxyCodeLine{7 \textcolor{comment}{ *}}
\DoxyCodeLine{8 \textcolor{comment}{ * GNU Zebra is free software; you can redistribute it and/or modify}}
\DoxyCodeLine{9 \textcolor{comment}{ * it under the terms of the GNU General Public License as published}}
\DoxyCodeLine{10 \textcolor{comment}{ * by the Free Software Foundation; either version 2, or (at your}}
\DoxyCodeLine{11 \textcolor{comment}{ * option) any later version.}}
\DoxyCodeLine{12 \textcolor{comment}{ *}}
\DoxyCodeLine{13 \textcolor{comment}{ * GNU Zebra is distributed in the hope that it will be useful, but}}
\DoxyCodeLine{14 \textcolor{comment}{ * WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{15 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU}}
\DoxyCodeLine{16 \textcolor{comment}{ * General Public License for more details.}}
\DoxyCodeLine{17 \textcolor{comment}{ *}}
\DoxyCodeLine{18 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{19 \textcolor{comment}{ * along with GNU Zebra; see the file COPYING.  If not, write to the}}
\DoxyCodeLine{20 \textcolor{comment}{ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,}}
\DoxyCodeLine{21 \textcolor{comment}{ * Boston, MA  02110-\/1301, USA.}}
\DoxyCodeLine{22 \textcolor{comment}{ */}}
\DoxyCodeLine{23 }
\DoxyCodeLine{24 \textcolor{preprocessor}{\#pragma once}}
\DoxyCodeLine{25 }
\DoxyCodeLine{26 \textcolor{preprocessor}{\#include <stdio.h>}}
\DoxyCodeLine{27 \textcolor{preprocessor}{\#include <stdbool.h>}}
\DoxyCodeLine{28 \textcolor{preprocessor}{\#include <sys/types.h>}}
\DoxyCodeLine{29 \textcolor{preprocessor}{\#include "{}vector.h"{}}}
\DoxyCodeLine{30 }
\DoxyCodeLine{31 \textcolor{preprocessor}{\#include <osmocom/core/defs.h>}}
\DoxyCodeLine{32 \textcolor{preprocessor}{\#include <osmocom/core/utils.h>}}
\DoxyCodeLine{33 }
\DoxyCodeLine{39 \textcolor{keyword}{struct }host \{}
\DoxyCodeLine{41         \textcolor{keywordtype}{char} *name;}
\DoxyCodeLine{42 }
\DoxyCodeLine{44         \textcolor{keywordtype}{char} *password;}
\DoxyCodeLine{45         \textcolor{keywordtype}{char} *password\_encrypt;}
\DoxyCodeLine{46 }
\DoxyCodeLine{48         \textcolor{keywordtype}{char} *enable;}
\DoxyCodeLine{49         \textcolor{keywordtype}{char} *enable\_encrypt;}
\DoxyCodeLine{50 }
\DoxyCodeLine{52         \textcolor{keywordtype}{int} lines;}
\DoxyCodeLine{53 }
\DoxyCodeLine{55         \textcolor{keywordtype}{char} *logfile;}
\DoxyCodeLine{56 }
\DoxyCodeLine{58         \textcolor{keywordtype}{char} *config;}
\DoxyCodeLine{59 }
\DoxyCodeLine{61         \textcolor{keywordtype}{int} advanced;}
\DoxyCodeLine{62         \textcolor{keywordtype}{int} encrypt;}
\DoxyCodeLine{63 }
\DoxyCodeLine{65         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *motd;}
\DoxyCodeLine{66         \textcolor{keywordtype}{char} *motdfile;}
\DoxyCodeLine{67 }
\DoxyCodeLine{69         \textcolor{keyword}{const} \textcolor{keyword}{struct }vty\_app\_info *app\_info;}
\DoxyCodeLine{70 \};}
\DoxyCodeLine{71 }
\DoxyCodeLine{73 \textcolor{keyword}{enum} node\_type \{}
\DoxyCodeLine{74         AUTH\_NODE,             }
\DoxyCodeLine{75         VIEW\_NODE,             }
\DoxyCodeLine{76         AUTH\_ENABLE\_NODE,       }
\DoxyCodeLine{77         ENABLE\_NODE,         }
\DoxyCodeLine{78         CONFIG\_NODE,         }
\DoxyCodeLine{79         SERVICE\_NODE,               }
\DoxyCodeLine{80         DEBUG\_NODE,           }
\DoxyCodeLine{81         CFG\_LOG\_NODE,               }
\DoxyCodeLine{82         CFG\_STATS\_NODE,           }
\DoxyCodeLine{84         VTY\_NODE,               }
\DoxyCodeLine{86         L\_E1INP\_NODE,               }
\DoxyCodeLine{87         L\_IPA\_NODE,           }
\DoxyCodeLine{88         L\_NS\_NODE,             }
\DoxyCodeLine{89         L\_BSSGP\_NODE,               }
\DoxyCodeLine{90         L\_CTRL\_NODE,         }
\DoxyCodeLine{92         L\_CS7\_NODE,           }
\DoxyCodeLine{93         L\_CS7\_AS\_NODE,             }
\DoxyCodeLine{94         L\_CS7\_ASP\_NODE,           }
\DoxyCodeLine{95         L\_CS7\_XUA\_NODE,           }
\DoxyCodeLine{96         L\_CS7\_RTABLE\_NODE,     }
\DoxyCodeLine{97         L\_CS7\_LINK\_NODE, }
\DoxyCodeLine{98         L\_CS7\_LINKSET\_NODE,   }
\DoxyCodeLine{99         L\_CS7\_SCCPADDR\_NODE, }
\DoxyCodeLine{100         L\_CS7\_SCCPADDR\_GT\_NODE,   }
\DoxyCodeLine{102         L\_CPU\_SCHED\_NODE,       }
\DoxyCodeLine{103         L\_NS\_BIND\_NODE,           }
\DoxyCodeLine{104         L\_NS\_NSE\_NODE,             }
\DoxyCodeLine{105         \textcolor{comment}{/*}}
\DoxyCodeLine{106 \textcolor{comment}{         * When adding new nodes to the libosmocore project, these nodes can be}}
\DoxyCodeLine{107 \textcolor{comment}{         * used to avoid ABI changes for unrelated projects.}}
\DoxyCodeLine{108 \textcolor{comment}{         */}}
\DoxyCodeLine{109         RESERVED1\_NODE,           }
\DoxyCodeLine{110         RESERVED2\_NODE,           }
\DoxyCodeLine{111         RESERVED3\_NODE,           }
\DoxyCodeLine{112         RESERVED4\_NODE,           }
\DoxyCodeLine{113         RESERVED5\_NODE,           }
\DoxyCodeLine{114         RESERVED6\_NODE,           }
\DoxyCodeLine{115         RESERVED7\_NODE,           }
\DoxyCodeLine{116         RESERVED8\_NODE,           }
\DoxyCodeLine{118         \_LAST\_OSMOVTY\_NODE}
\DoxyCodeLine{119 \};}
\DoxyCodeLine{120 }
\DoxyCodeLine{121 \textcolor{preprocessor}{\#include "{}vty.h"{}}}
\DoxyCodeLine{122 }
\DoxyCodeLine{125 \textcolor{keyword}{struct }cmd\_node \{}
\DoxyCodeLine{127         \textcolor{keywordtype}{int} node;}
\DoxyCodeLine{128 }
\DoxyCodeLine{130         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *prompt;}
\DoxyCodeLine{131 }
\DoxyCodeLine{133         \textcolor{keywordtype}{int} vtysh;}
\DoxyCodeLine{134 }
\DoxyCodeLine{136         int (*func) (\textcolor{keyword}{struct }vty *);}
\DoxyCodeLine{137 }
\DoxyCodeLine{139         vector cmd\_vector;}
\DoxyCodeLine{140 }
\DoxyCodeLine{144         \textcolor{keywordtype}{char} name[64];}
\DoxyCodeLine{145 \};}
\DoxyCodeLine{146 }
\DoxyCodeLine{148 \textcolor{keyword}{enum} \{}
\DoxyCodeLine{149         CMD\_ATTR\_DEPRECATED  = (1 << 0),}
\DoxyCodeLine{150         CMD\_ATTR\_HIDDEN          = (1 << 1),}
\DoxyCodeLine{151         CMD\_ATTR\_IMMEDIATE    = (1 << 2),}
\DoxyCodeLine{152         CMD\_ATTR\_NODE\_EXIT    = (1 << 3),}
\DoxyCodeLine{153         CMD\_ATTR\_LIB\_COMMAND        = (1 << 4),}
\DoxyCodeLine{154 \};}
\DoxyCodeLine{155 }
\DoxyCodeLine{157 \textcolor{keyword}{enum} \{}
\DoxyCodeLine{158         \textcolor{comment}{/* The entries of this enum shall conform the following requirements:}}
\DoxyCodeLine{159 \textcolor{comment}{         * 1. Naming format: 'OSMO\_' + <LIBNAME> + '\_LIB\_ATTR\_' + <ATTRNAME>,}}
\DoxyCodeLine{160 \textcolor{comment}{         *    where LIBNAME is a short name of the library, e.g. 'ABIS', 'MGCP',}}
\DoxyCodeLine{161 \textcolor{comment}{         *    and ATTRNAME is a brief name of the attribute, e.g. RTP\_CONN\_EST;}}
\DoxyCodeLine{162 \textcolor{comment}{         *    for example: 'OSMO\_ABIS\_LIB\_ATTR\_RSL\_LINK\_UP'.}}
\DoxyCodeLine{163 \textcolor{comment}{         * 2. Brevity: shortenings and abbreviations are welcome!}}
\DoxyCodeLine{164 \textcolor{comment}{         * 3. Values are not flags but indexes, unlike CMD\_ATTR\_*.}}
\DoxyCodeLine{165 \textcolor{comment}{         * 4. Ordering: new entries added before \_OSMO\_CORE\_LIB\_ATTR\_COUNT. */}}
\DoxyCodeLine{166         OSMO\_SCCP\_LIB\_ATTR\_RSTRT\_ASP,}
\DoxyCodeLine{167         OSMO\_ABIS\_LIB\_ATTR\_IPA\_NEW\_LNK,}
\DoxyCodeLine{168         OSMO\_ABIS\_LIB\_ATTR\_LINE\_UPD,}
\DoxyCodeLine{169 }
\DoxyCodeLine{170         \textcolor{comment}{/* Keep this floating entry last, it's needed for count check. */}}
\DoxyCodeLine{171         \_OSMO\_CORE\_LIB\_ATTR\_COUNT}
\DoxyCodeLine{172 \};}
\DoxyCodeLine{173 }
\DoxyCodeLine{175 \textcolor{keyword}{struct }cmd\_element \{}
\DoxyCodeLine{176         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *string;       }
\DoxyCodeLine{177         int (*func) (\textcolor{keyword}{struct }cmd\_element *, \textcolor{keyword}{struct }vty *, int, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *[]);}
\DoxyCodeLine{178         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *doc;     }
\DoxyCodeLine{179         \textcolor{keywordtype}{int} daemon;               }
\DoxyCodeLine{180         vector strvec;              }
\DoxyCodeLine{181         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} cmdsize;    }
\DoxyCodeLine{182         \textcolor{keywordtype}{char} *config;             }
\DoxyCodeLine{183         vector subconfig;        }
\DoxyCodeLine{184         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} attr; }
\DoxyCodeLine{185         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} usrattr;    }
\DoxyCodeLine{186 \};}
\DoxyCodeLine{187 }
\DoxyCodeLine{189 \textcolor{keyword}{struct }desc \{}
\DoxyCodeLine{190         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *cmd;     }
\DoxyCodeLine{191         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *str;     }
\DoxyCodeLine{192 \};}
\DoxyCodeLine{193 }
\DoxyCodeLine{195 \textcolor{preprocessor}{\#define CMD\_SUCCESS              0}}
\DoxyCodeLine{196 \textcolor{preprocessor}{\#define CMD\_WARNING              1}}
\DoxyCodeLine{197 \textcolor{preprocessor}{\#define CMD\_ERR\_NO\_MATCH         2}}
\DoxyCodeLine{198 \textcolor{preprocessor}{\#define CMD\_ERR\_AMBIGUOUS        3}}
\DoxyCodeLine{199 \textcolor{preprocessor}{\#define CMD\_ERR\_INCOMPLETE       4}}
\DoxyCodeLine{200 \textcolor{preprocessor}{\#define CMD\_ERR\_EXEED\_ARGC\_MAX   5}}
\DoxyCodeLine{201 \textcolor{preprocessor}{\#define CMD\_ERR\_NOTHING\_TODO     6}}
\DoxyCodeLine{202 \textcolor{preprocessor}{\#define CMD\_COMPLETE\_FULL\_MATCH  7}}
\DoxyCodeLine{203 \textcolor{preprocessor}{\#define CMD\_COMPLETE\_MATCH       8}}
\DoxyCodeLine{204 \textcolor{preprocessor}{\#define CMD\_COMPLETE\_LIST\_MATCH  9}}
\DoxyCodeLine{205 \textcolor{preprocessor}{\#define CMD\_SUCCESS\_DAEMON      10}}
\DoxyCodeLine{206 \textcolor{preprocessor}{\#define CMD\_ERR\_INVALID\_INDENT  11}}
\DoxyCodeLine{207 }
\DoxyCodeLine{208 \textcolor{comment}{/* Argc max counts. */}}
\DoxyCodeLine{209 \textcolor{preprocessor}{\#define CMD\_ARGC\_MAX   256}}
\DoxyCodeLine{210 }
\DoxyCodeLine{211 \textcolor{comment}{/* Turn off these macros when uisng cpp with extract.pl */}}
\DoxyCodeLine{212 \textcolor{preprocessor}{\#ifndef VTYSH\_EXTRACT\_PL}}
\DoxyCodeLine{213 }
\DoxyCodeLine{214 \textcolor{comment}{/* helper defines for end-\/user DEFUN* macros */}}
\DoxyCodeLine{215 \textcolor{preprocessor}{\#define DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum) \(\backslash\)}}
\DoxyCodeLine{216 \textcolor{preprocessor}{  static struct cmd\_element cmdname = \(\backslash\)}}
\DoxyCodeLine{217 \textcolor{preprocessor}{  \{ \(\backslash\)}}
\DoxyCodeLine{218 \textcolor{preprocessor}{    .string = cmdstr, \(\backslash\)}}
\DoxyCodeLine{219 \textcolor{preprocessor}{    .func = funcname, \(\backslash\)}}
\DoxyCodeLine{220 \textcolor{preprocessor}{    .doc = helpstr, \(\backslash\)}}
\DoxyCodeLine{221 \textcolor{preprocessor}{    .attr = attrs, \(\backslash\)}}
\DoxyCodeLine{222 \textcolor{preprocessor}{    .daemon = dnum, \(\backslash\)}}
\DoxyCodeLine{223 \textcolor{preprocessor}{  \};}}
\DoxyCodeLine{224 }
\DoxyCodeLine{225 \textcolor{comment}{/* global (non static) cmd\_element */}}
\DoxyCodeLine{226 \textcolor{preprocessor}{\#define gDEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum) \(\backslash\)}}
\DoxyCodeLine{227 \textcolor{preprocessor}{  struct cmd\_element cmdname = \(\backslash\)}}
\DoxyCodeLine{228 \textcolor{preprocessor}{  \{ \(\backslash\)}}
\DoxyCodeLine{229 \textcolor{preprocessor}{    .string = cmdstr, \(\backslash\)}}
\DoxyCodeLine{230 \textcolor{preprocessor}{    .func = funcname, \(\backslash\)}}
\DoxyCodeLine{231 \textcolor{preprocessor}{    .doc = helpstr, \(\backslash\)}}
\DoxyCodeLine{232 \textcolor{preprocessor}{    .attr = attrs, \(\backslash\)}}
\DoxyCodeLine{233 \textcolor{preprocessor}{    .daemon = dnum, \(\backslash\)}}
\DoxyCodeLine{234 \textcolor{preprocessor}{  \};}}
\DoxyCodeLine{235 }
\DoxyCodeLine{236 \textcolor{preprocessor}{\#define DEFUN\_CMD\_ELEMENT\_ATTR\_USRATTR(funcname, cmdname, cmdstr, helpstr, attrs, usrattrs) \(\backslash\)}}
\DoxyCodeLine{237 \textcolor{preprocessor}{  static struct cmd\_element cmdname = \(\backslash\)}}
\DoxyCodeLine{238 \textcolor{preprocessor}{  \{ \(\backslash\)}}
\DoxyCodeLine{239 \textcolor{preprocessor}{    .string = cmdstr, \(\backslash\)}}
\DoxyCodeLine{240 \textcolor{preprocessor}{    .func = funcname, \(\backslash\)}}
\DoxyCodeLine{241 \textcolor{preprocessor}{    .doc = helpstr, \(\backslash\)}}
\DoxyCodeLine{242 \textcolor{preprocessor}{    .attr = attrs, \(\backslash\)}}
\DoxyCodeLine{243 \textcolor{preprocessor}{    .usrattr = usrattrs, \(\backslash\)}}
\DoxyCodeLine{244 \textcolor{preprocessor}{  \};}}
\DoxyCodeLine{245 }
\DoxyCodeLine{246 \textcolor{preprocessor}{\#define DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{247 \textcolor{preprocessor}{  static int funcname (struct cmd\_element *, struct vty *, int, const char *[]); \(\backslash\)}}
\DoxyCodeLine{248 \textcolor{preprocessor}{}}
\DoxyCodeLine{249 \textcolor{preprocessor}{\#define DEFUN\_CMD\_FUNC\_TEXT(funcname) \(\backslash\)}}
\DoxyCodeLine{250 \textcolor{preprocessor}{  static int funcname \(\backslash\)}}
\DoxyCodeLine{251 \textcolor{preprocessor}{    (struct cmd\_element *self, struct vty *vty, int argc, const char *argv[])}}
\DoxyCodeLine{252 }
\DoxyCodeLine{259 \textcolor{preprocessor}{\#define DEFUN(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{260 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{261 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \(\backslash\)}}
\DoxyCodeLine{262 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{263 }
\DoxyCodeLine{270 \textcolor{preprocessor}{\#define gDEFUN(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{271 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{272 \textcolor{preprocessor}{  gDEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \(\backslash\)}}
\DoxyCodeLine{273 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{274 }
\DoxyCodeLine{275 \textcolor{preprocessor}{\#define DEFUN\_ATTR(funcname, cmdname, cmdstr, helpstr, attr) \(\backslash\)}}
\DoxyCodeLine{276 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{277 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, 0) \(\backslash\)}}
\DoxyCodeLine{278 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{279 }
\DoxyCodeLine{280 \textcolor{preprocessor}{\#define DEFUN\_HIDDEN(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{281 \textcolor{preprocessor}{  DEFUN\_ATTR (funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_HIDDEN)}}
\DoxyCodeLine{282 }
\DoxyCodeLine{283 \textcolor{preprocessor}{\#define DEFUN\_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{284 \textcolor{preprocessor}{  DEFUN\_ATTR (funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_DEPRECATED)}}
\DoxyCodeLine{285 }
\DoxyCodeLine{294 \textcolor{preprocessor}{\#define DEFUN\_ATTR\_USRATTR(funcname, cmdname, attr, usrattr, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{295 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{296 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT\_ATTR\_USRATTR(funcname, cmdname, cmdstr, helpstr, attr, usrattr) \(\backslash\)}}
\DoxyCodeLine{297 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{298 }
\DoxyCodeLine{299 \textcolor{preprocessor}{\#define DEFUN\_USRATTR(funcname, cmdname, usrattr, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{300 \textcolor{preprocessor}{  DEFUN\_ATTR\_USRATTR(funcname, cmdname, 0, usrattr, cmdstr, helpstr)}}
\DoxyCodeLine{301 }
\DoxyCodeLine{302 \textcolor{comment}{/* DEFUN\_NOSH for commands that vtysh should ignore */}}
\DoxyCodeLine{303 \textcolor{preprocessor}{\#define DEFUN\_NOSH(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{304 \textcolor{preprocessor}{  DEFUN(funcname, cmdname, cmdstr, helpstr)}}
\DoxyCodeLine{305 }
\DoxyCodeLine{306 \textcolor{comment}{/* DEFSH for vtysh. */}}
\DoxyCodeLine{307 \textcolor{preprocessor}{\#define DEFSH(daemon, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{308 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(NULL, cmdname, cmdstr, helpstr, 0, daemon) \(\backslash\)}}
\DoxyCodeLine{309 \textcolor{preprocessor}{}}
\DoxyCodeLine{310 \textcolor{comment}{/* DEFUN + DEFSH */}}
\DoxyCodeLine{311 \textcolor{preprocessor}{\#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{312 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{313 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon) \(\backslash\)}}
\DoxyCodeLine{314 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{315 }
\DoxyCodeLine{316 \textcolor{comment}{/* DEFUN + DEFSH with attributes */}}
\DoxyCodeLine{317 \textcolor{preprocessor}{\#define DEFUNSH\_ATTR(daemon, funcname, cmdname, cmdstr, helpstr, attr) \(\backslash\)}}
\DoxyCodeLine{318 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_DECL(funcname) \(\backslash\)}}
\DoxyCodeLine{319 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, daemon) \(\backslash\)}}
\DoxyCodeLine{320 \textcolor{preprocessor}{  DEFUN\_CMD\_FUNC\_TEXT(funcname)}}
\DoxyCodeLine{321 }
\DoxyCodeLine{322 \textcolor{preprocessor}{\#define DEFUNSH\_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{323 \textcolor{preprocessor}{  DEFUNSH\_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_HIDDEN)}}
\DoxyCodeLine{324 }
\DoxyCodeLine{325 \textcolor{preprocessor}{\#define DEFUNSH\_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{326 \textcolor{preprocessor}{  DEFUNSH\_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_DEPRECATED)}}
\DoxyCodeLine{327 }
\DoxyCodeLine{328 \textcolor{comment}{/* ALIAS macro which define existing command's alias. */}}
\DoxyCodeLine{329 \textcolor{preprocessor}{\#define ALIAS(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{330 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0)}}
\DoxyCodeLine{331 }
\DoxyCodeLine{332 \textcolor{comment}{/* global (non static) cmd\_element */}}
\DoxyCodeLine{333 \textcolor{preprocessor}{\#define gALIAS(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{334 \textcolor{preprocessor}{  gDEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0)}}
\DoxyCodeLine{335 }
\DoxyCodeLine{336 \textcolor{preprocessor}{\#define ALIAS\_ATTR(funcname, cmdname, cmdstr, helpstr, attr) \(\backslash\)}}
\DoxyCodeLine{337 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, 0)}}
\DoxyCodeLine{338 }
\DoxyCodeLine{339 \textcolor{preprocessor}{\#define ALIAS\_HIDDEN(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{340 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_HIDDEN, 0)}}
\DoxyCodeLine{341 }
\DoxyCodeLine{342 \textcolor{preprocessor}{\#define ALIAS\_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{343 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_DEPRECATED, 0)}}
\DoxyCodeLine{344 }
\DoxyCodeLine{345 \textcolor{preprocessor}{\#define ALIAS\_SH(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{346 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon)}}
\DoxyCodeLine{347 }
\DoxyCodeLine{348 \textcolor{preprocessor}{\#define ALIAS\_SH\_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{349 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_HIDDEN, daemon)}}
\DoxyCodeLine{350 }
\DoxyCodeLine{351 \textcolor{preprocessor}{\#define ALIAS\_SH\_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr) \(\backslash\)}}
\DoxyCodeLine{352 \textcolor{preprocessor}{  DEFUN\_CMD\_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD\_ATTR\_DEPRECATED, daemon)}}
\DoxyCodeLine{353 }
\DoxyCodeLine{354 \textcolor{preprocessor}{\#endif                          }\textcolor{comment}{/* VTYSH\_EXTRACT\_PL */}\textcolor{preprocessor}{}}
\DoxyCodeLine{355 }
\DoxyCodeLine{356 \textcolor{comment}{/* Some macroes */}}
\DoxyCodeLine{357 \textcolor{preprocessor}{\#define CMD\_OPTION(S)   ((S[0]) == '[')}}
\DoxyCodeLine{358 \textcolor{preprocessor}{\#define CMD\_VARIABLE(S) (((S[0]) >= 'A' \&\& (S[0]) <= 'Z') || ((S[0]) == '<'))}}
\DoxyCodeLine{359 \textcolor{preprocessor}{\#define CMD\_VARARG(S)   ((S[0]) == '.')}}
\DoxyCodeLine{360 \textcolor{preprocessor}{\#define CMD\_RANGE(S)    ((S[0] == '<'))}}
\DoxyCodeLine{361 }
\DoxyCodeLine{362 \textcolor{preprocessor}{\#define CMD\_IPV4(S)        ((strcmp ((S), "{}A.B.C.D"{}}) == 0))}
\DoxyCodeLine{363 \textcolor{preprocessor}{\#define CMD\_IPV4\_PREFIX(S) ((strcmp ((S), "{}A.B.C.D/M"{}}) == 0))}
\DoxyCodeLine{364 \textcolor{preprocessor}{\#define CMD\_IPV6(S)        ((strcmp ((S), "{}X:X::X:X"{}}) == 0))}
\DoxyCodeLine{365 \textcolor{preprocessor}{\#define CMD\_IPV6\_PREFIX(S) ((strcmp ((S), "{}X:X::X:X/M"{}}) == 0))}
\DoxyCodeLine{366 }
\DoxyCodeLine{367 \textcolor{preprocessor}{\#define VTY\_IPV4\_CMD "{}A.B.C.D"{}}}
\DoxyCodeLine{368 \textcolor{preprocessor}{\#define VTY\_IPV6\_CMD "{}X:X::X:X"{}}}
\DoxyCodeLine{369 \textcolor{preprocessor}{\#define VTY\_IPV46\_CMD "{}("{}} VTY\_IPV4\_CMD "{}|"{} VTY\_IPV6\_CMD "{})"{}}
\DoxyCodeLine{370 }
\DoxyCodeLine{371 \textcolor{comment}{/* Common descriptions. */}}
\DoxyCodeLine{372 \textcolor{preprocessor}{\#define SHOW\_STR "{}Show running system information\(\backslash\)n"{}}}
\DoxyCodeLine{373 \textcolor{preprocessor}{\#define IP\_STR "{}IP information\(\backslash\)n"{}}}
\DoxyCodeLine{374 \textcolor{preprocessor}{\#define IPV6\_STR "{}IPv6 information\(\backslash\)n"{}}}
\DoxyCodeLine{375 \textcolor{preprocessor}{\#define NO\_STR "{}Negate a command or set its defaults\(\backslash\)n"{}}}
\DoxyCodeLine{376 \textcolor{preprocessor}{\#define CLEAR\_STR "{}Reset functions\(\backslash\)n"{}}}
\DoxyCodeLine{377 \textcolor{preprocessor}{\#define RIP\_STR "{}RIP information\(\backslash\)n"{}}}
\DoxyCodeLine{378 \textcolor{preprocessor}{\#define BGP\_STR "{}BGP information\(\backslash\)n"{}}}
\DoxyCodeLine{379 \textcolor{preprocessor}{\#define OSPF\_STR "{}OSPF information\(\backslash\)n"{}}}
\DoxyCodeLine{380 \textcolor{preprocessor}{\#define NEIGHBOR\_STR "{}Specify neighbor router\(\backslash\)n"{}}}
\DoxyCodeLine{381 \textcolor{preprocessor}{\#define DEBUG\_STR "{}Debugging functions (see also 'undebug')\(\backslash\)n"{}}}
\DoxyCodeLine{382 \textcolor{preprocessor}{\#define UNDEBUG\_STR "{}Disable debugging functions (see also 'debug')\(\backslash\)n"{}}}
\DoxyCodeLine{383 \textcolor{preprocessor}{\#define ROUTER\_STR "{}Enable a routing process\(\backslash\)n"{}}}
\DoxyCodeLine{384 \textcolor{preprocessor}{\#define AS\_STR "{}AS number\(\backslash\)n"{}}}
\DoxyCodeLine{385 \textcolor{preprocessor}{\#define MBGP\_STR "{}MBGP information\(\backslash\)n"{}}}
\DoxyCodeLine{386 \textcolor{preprocessor}{\#define MATCH\_STR "{}Match values from routing table\(\backslash\)n"{}}}
\DoxyCodeLine{387 \textcolor{preprocessor}{\#define SET\_STR "{}Set values in destination routing protocol\(\backslash\)n"{}}}
\DoxyCodeLine{388 \textcolor{preprocessor}{\#define OUT\_STR "{}Filter outgoing routing updates\(\backslash\)n"{}}}
\DoxyCodeLine{389 \textcolor{preprocessor}{\#define IN\_STR  "{}Filter incoming routing updates\(\backslash\)n"{}}}
\DoxyCodeLine{390 \textcolor{preprocessor}{\#define V4NOTATION\_STR "{}specify by IPv4 address notation(e.g. 0.0.0.0)\(\backslash\)n"{}}}
\DoxyCodeLine{391 \textcolor{preprocessor}{\#define OSPF6\_NUMBER\_STR "{}Specify by number\(\backslash\)n"{}}}
\DoxyCodeLine{392 \textcolor{preprocessor}{\#define INTERFACE\_STR "{}Interface infomation\(\backslash\)n"{}}}
\DoxyCodeLine{393 \textcolor{preprocessor}{\#define IFNAME\_STR "{}Interface name(e.g. ep0)\(\backslash\)n"{}}}
\DoxyCodeLine{394 \textcolor{preprocessor}{\#define IP6\_STR "{}IPv6 Information\(\backslash\)n"{}}}
\DoxyCodeLine{395 \textcolor{preprocessor}{\#define OSPF6\_STR "{}Open Shortest Path First (OSPF) for IPv6\(\backslash\)n"{}}}
\DoxyCodeLine{396 \textcolor{preprocessor}{\#define OSPF6\_ROUTER\_STR "{}Enable a routing process\(\backslash\)n"{}}}
\DoxyCodeLine{397 \textcolor{preprocessor}{\#define OSPF6\_INSTANCE\_STR "{}<1-\/65535> Instance ID\(\backslash\)n"{}}}
\DoxyCodeLine{398 \textcolor{preprocessor}{\#define SECONDS\_STR "{}<1-\/65535> Seconds\(\backslash\)n"{}}}
\DoxyCodeLine{399 \textcolor{preprocessor}{\#define ROUTE\_STR "{}Routing Table\(\backslash\)n"{}}}
\DoxyCodeLine{400 \textcolor{preprocessor}{\#define PREFIX\_LIST\_STR "{}Build a prefix list\(\backslash\)n"{}}}
\DoxyCodeLine{401 \textcolor{preprocessor}{\#define OSPF6\_DUMP\_TYPE\_LIST \(\backslash\)}}
\DoxyCodeLine{402 \textcolor{preprocessor}{"{}(neighbor|interface|area|lsa|zebra|config|dbex|spf|route|lsdb|redistribute|hook|asbr|prefix|abr)"{}}}
\DoxyCodeLine{403 \textcolor{preprocessor}{\#define ISIS\_STR "{}IS-\/IS information\(\backslash\)n"{}}}
\DoxyCodeLine{404 \textcolor{preprocessor}{\#define AREA\_TAG\_STR "{}[area tag]\(\backslash\)n"{}}}
\DoxyCodeLine{405 }
\DoxyCodeLine{406 \textcolor{preprocessor}{\#define CONF\_BACKUP\_EXT "{}.sav"{}}}
\DoxyCodeLine{407 }
\DoxyCodeLine{408 \textcolor{comment}{/* IPv4 only machine should not accept IPv6 address for peer's IP}}
\DoxyCodeLine{409 \textcolor{comment}{   address.  So we replace VTY command string like below. */}}
\DoxyCodeLine{410 \textcolor{preprocessor}{\#ifdef HAVE\_IPV6}}
\DoxyCodeLine{411 \textcolor{preprocessor}{\#define NEIGHBOR\_CMD       "{}neighbor (A.B.C.D|X:X::X:X) "{}}}
\DoxyCodeLine{412 \textcolor{preprocessor}{\#define NO\_NEIGHBOR\_CMD    "{}no neighbor (A.B.C.D|X:X::X:X) "{}}}
\DoxyCodeLine{413 \textcolor{preprocessor}{\#define NEIGHBOR\_ADDR\_STR  "{}Neighbor address\(\backslash\)nIPv6 address\(\backslash\)n"{}}}
\DoxyCodeLine{414 \textcolor{preprocessor}{\#define NEIGHBOR\_CMD2      "{}neighbor (A.B.C.D|X:X::X:X|WORD) "{}}}
\DoxyCodeLine{415 \textcolor{preprocessor}{\#define NO\_NEIGHBOR\_CMD2   "{}no neighbor (A.B.C.D|X:X::X:X|WORD) "{}}}
\DoxyCodeLine{416 \textcolor{preprocessor}{\#define NEIGHBOR\_ADDR\_STR2 "{}Neighbor address\(\backslash\)nNeighbor IPv6 address\(\backslash\)nNeighbor tag\(\backslash\)n"{}}}
\DoxyCodeLine{417 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{418 \textcolor{preprocessor}{\#define NEIGHBOR\_CMD       "{}neighbor A.B.C.D "{}}}
\DoxyCodeLine{419 \textcolor{preprocessor}{\#define NO\_NEIGHBOR\_CMD    "{}no neighbor A.B.C.D "{}}}
\DoxyCodeLine{420 \textcolor{preprocessor}{\#define NEIGHBOR\_ADDR\_STR  "{}Neighbor address\(\backslash\)n"{}}}
\DoxyCodeLine{421 \textcolor{preprocessor}{\#define NEIGHBOR\_CMD2      "{}neighbor (A.B.C.D|WORD) "{}}}
\DoxyCodeLine{422 \textcolor{preprocessor}{\#define NO\_NEIGHBOR\_CMD2   "{}no neighbor (A.B.C.D|WORD) "{}}}
\DoxyCodeLine{423 \textcolor{preprocessor}{\#define NEIGHBOR\_ADDR\_STR2 "{}Neighbor address\(\backslash\)nNeighbor tag\(\backslash\)n"{}}}
\DoxyCodeLine{424 \textcolor{preprocessor}{\#endif                          }\textcolor{comment}{/* HAVE\_IPV6 */}\textcolor{preprocessor}{}}
\DoxyCodeLine{425 }
\DoxyCodeLine{426 \textcolor{comment}{/* Prototypes. */}}
\DoxyCodeLine{427 \textcolor{keywordtype}{void} install\_node(\textcolor{keyword}{struct} cmd\_node *, \textcolor{keywordtype}{int} (*)(\textcolor{keyword}{struct} vty *));}
\DoxyCodeLine{428 \textcolor{keywordtype}{void} install\_default(\textcolor{keywordtype}{int} node\_type) OSMO\_DEPRECATED(\textcolor{stringliteral}{"{}Now happens implicitly with install\_node()"{}});}
\DoxyCodeLine{429 \textcolor{keywordtype}{void} install\_element(\textcolor{keywordtype}{int} node\_type, \textcolor{keyword}{struct} cmd\_element *);}
\DoxyCodeLine{430 \textcolor{keywordtype}{void} install\_lib\_element(\textcolor{keywordtype}{int} node\_type, \textcolor{keyword}{struct} cmd\_element *);}
\DoxyCodeLine{431 \textcolor{keywordtype}{void} install\_element\_ve(\textcolor{keyword}{struct} cmd\_element *cmd);}
\DoxyCodeLine{432 \textcolor{keywordtype}{void} install\_lib\_element\_ve(\textcolor{keyword}{struct} cmd\_element *cmd);}
\DoxyCodeLine{433 \textcolor{keywordtype}{void} sort\_node(\textcolor{keywordtype}{void});}
\DoxyCodeLine{434 }
\DoxyCodeLine{435 \textcolor{keywordtype}{void} vty\_install\_default(\textcolor{keywordtype}{int} node\_type) OSMO\_DEPRECATED(\textcolor{stringliteral}{"{}Now happens implicitly with install\_node()"{}});}
\DoxyCodeLine{436 }
\DoxyCodeLine{437 \textcolor{comment}{/* Concatenates argv[shift] through argv[argc-\/1] into a single NUL-\/terminated}}
\DoxyCodeLine{438 \textcolor{comment}{   string with a space between each element (allocated using}}
\DoxyCodeLine{439 \textcolor{comment}{   XMALLOC(MTYPE\_TMP)).  Returns NULL if shift >= argc. */}}
\DoxyCodeLine{440 \textcolor{keywordtype}{char} *argv\_concat(\textcolor{keyword}{const} \textcolor{keywordtype}{char} **argv, \textcolor{keywordtype}{int} argc, \textcolor{keywordtype}{int} shift);}
\DoxyCodeLine{441 }
\DoxyCodeLine{442 vector cmd\_make\_strvec(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *);}
\DoxyCodeLine{443 \textcolor{keywordtype}{int} cmd\_make\_strvec2(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *\textcolor{keywordtype}{string}, \textcolor{keywordtype}{char} **indent, vector *strvec\_p);}
\DoxyCodeLine{444 \textcolor{keywordtype}{void} cmd\_free\_strvec(vector);}
\DoxyCodeLine{445 vector cmd\_describe\_command(vector vline, \textcolor{keyword}{struct} vty *vty, \textcolor{keywordtype}{int} *status);}
\DoxyCodeLine{446 \textcolor{keywordtype}{char} **cmd\_complete\_command(vector vline, \textcolor{keyword}{struct} vty *vty, \textcolor{keywordtype}{int} *status);}
\DoxyCodeLine{447 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *cmd\_prompt(\textcolor{keyword}{enum} node\_type);}
\DoxyCodeLine{448 \textcolor{keywordtype}{int} config\_from\_file(\textcolor{keyword}{struct} vty *, FILE *);}
\DoxyCodeLine{449 \textcolor{keyword}{enum} node\_type node\_parent(\textcolor{keyword}{enum} node\_type);}
\DoxyCodeLine{450 \textcolor{keywordtype}{int} cmd\_execute\_command(vector, \textcolor{keyword}{struct} vty *, \textcolor{keyword}{struct} cmd\_element **, \textcolor{keywordtype}{int});}
\DoxyCodeLine{451 \textcolor{keywordtype}{int} cmd\_execute\_command\_strict(vector, \textcolor{keyword}{struct} vty *, \textcolor{keyword}{struct} cmd\_element **);}
\DoxyCodeLine{452 \textcolor{keywordtype}{void} config\_replace\_string(\textcolor{keyword}{struct} cmd\_element *, \textcolor{keywordtype}{char} *, ...);}
\DoxyCodeLine{453 \textcolor{keywordtype}{void} cmd\_init(\textcolor{keywordtype}{int});}
\DoxyCodeLine{454 }
\DoxyCodeLine{455 \textcolor{comment}{/* Export typical functions. */}}
\DoxyCodeLine{456 \textcolor{keyword}{extern} \textcolor{keyword}{struct }cmd\_element config\_exit\_cmd;}
\DoxyCodeLine{457 \textcolor{keyword}{extern} \textcolor{keyword}{struct }cmd\_element config\_help\_cmd;}
\DoxyCodeLine{458 \textcolor{keyword}{extern} \textcolor{keyword}{struct }cmd\_element config\_list\_cmd;}
\DoxyCodeLine{459 \textcolor{keyword}{extern} \textcolor{keyword}{struct }cmd\_element config\_end\_cmd;}
\DoxyCodeLine{460 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *host\_config\_file(\textcolor{keywordtype}{void});}
\DoxyCodeLine{461 \textcolor{keywordtype}{void} host\_config\_set(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *);}
\DoxyCodeLine{462 }
\DoxyCodeLine{463 \textcolor{keywordtype}{char} *osmo\_asciidoc\_escape(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *inp);}
\DoxyCodeLine{464 }
\DoxyCodeLine{465 \textcolor{comment}{/* This is called from main when a daemon is invoked with -\/v or -\/-\/version. */}}
\DoxyCodeLine{466 \textcolor{keywordtype}{void} print\_version(\textcolor{keywordtype}{int} print\_copyright);}
\DoxyCodeLine{467 }
\DoxyCodeLine{468 \textcolor{keyword}{extern} \textcolor{keywordtype}{void} *tall\_vty\_cmd\_ctx;}
\DoxyCodeLine{469 }
\DoxyCodeLine{471 \textcolor{keyword}{enum} vty\_ref\_gen\_mode \{}
\DoxyCodeLine{473         VTY\_REF\_GEN\_MODE\_DEFAULT = 0,}
\DoxyCodeLine{475         VTY\_REF\_GEN\_MODE\_EXPERT,}
\DoxyCodeLine{477         VTY\_REF\_GEN\_MODE\_HIDDEN,}
\DoxyCodeLine{478 \};}
\DoxyCodeLine{479 }
\DoxyCodeLine{480 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string vty\_ref\_gen\_mode\_names[];}
\DoxyCodeLine{481 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string vty\_ref\_gen\_mode\_desc[];}
\DoxyCodeLine{482 }
\DoxyCodeLine{483 \textcolor{keywordtype}{int} vty\_dump\_xml\_ref\_mode(FILE *stream, \textcolor{keyword}{enum} vty\_ref\_gen\_mode mode);}
\DoxyCodeLine{484 \textcolor{keywordtype}{int} vty\_dump\_xml\_ref(FILE *stream) OSMO\_DEPRECATED(\textcolor{stringliteral}{"{}Use vty\_dump\_xml\_ref\_mode() instead"{}});}
\DoxyCodeLine{485 }
\DoxyCodeLine{486 \textcolor{keywordtype}{int} vty\_cmd\_range\_match(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *range, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *str);}
\DoxyCodeLine{487 }

\end{DoxyCode}
