\doxysection{Tnnn timer VTY configuration}
\label{group__Tdef__VTY}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}


CPU Scheduling related VTY API.  


\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item 
file \textbf{ tdef\+\_\+vty.\+h}
\begin{DoxyCompactList}\small\item\em API to configure \textbf{ osmo\+\_\+tdef} Tnnn timers from VTY configuration. \end{DoxyCompactList}\item 
file \textbf{ cpu\+\_\+sched\+\_\+vty.\+c}
\begin{DoxyCompactList}\small\item\em Implementation to CPU / Threading / Scheduler properties from VTY configuration. \end{DoxyCompactList}\item 
file \textbf{ tdef\+\_\+vty.\+c}
\begin{DoxyCompactList}\small\item\em Implementation to configure \textbf{ osmo\+\_\+tdef} Tnnn timers from VTY configuration. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ cpu\+\_\+affinity\+\_\+it}
\item 
struct \textbf{ sched\+\_\+vty\+\_\+opts}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T}~\char`\"{}TNNNN\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+T}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+T\+\_\+\+OPTIONAL}~\char`\"{}[\char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T} \char`\"{}]\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL}~\char`\"{}($<$0-\/2147483647$>$$\vert$default)\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+VAL}~\char`\"{}New timer \textbf{ value\textbackslash{}n}\char`\"{} \char`\"{}Set to default timer \textbf{ value\textbackslash{}n}\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL\+\_\+\+OPTIONAL}~\char`\"{}[\char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL} \char`\"{}]\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+SET}~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T} \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+SET}~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+T} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+VAL}
\item 
\#define \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+SET\+\_\+\+OPTIONAL}~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+T\+\_\+\+OPTIONAL} \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL\+\_\+\+OPTIONAL}
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id} \{ \newline
\textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+SELF}
, \newline
\textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL}
, \newline
\textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ID}
, \newline
\textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+NAME}
, \newline
\textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+UNKNOWN}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
int \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$$\ast$args)
\begin{DoxyCompactList}\small\item\em Apply a timer configuration from VTY argument strings. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$\textbf{ T\+\_\+arg}, const char $\ast$prefix\+\_\+fmt,...)
\begin{DoxyCompactList}\small\item\em Output one or all timers to the VTY, as for a VTY command like \textquotesingle{}show timer [TNNNN]\textquotesingle{}. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+write} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$prefix\+\_\+fmt,...)
\begin{DoxyCompactList}\small\item\em Write current timer configuration arguments to the vty. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$t, const char $\ast$prefix\+\_\+fmt,...)
\begin{DoxyCompactList}\small\item\em Write to VTY the current status of one timer. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$prefix\+\_\+fmt,...)
\begin{DoxyCompactList}\small\item\em Write to VTY the current status of all given timers. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one\+\_\+va} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$t, const char $\ast$prefix\+\_\+fmt, va\+\_\+list va)
\begin{DoxyCompactList}\small\item\em Write to VTY the current status of one timer. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$prefix\+\_\+fmt, va\+\_\+list va)
\begin{DoxyCompactList}\small\item\em Write to VTY the current status of all given timers. \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+tdef} $\ast$ \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ osmo\+\_\+tdef} $\ast$\textbf{ tdefs}, const char $\ast$T\+\_\+str)
\begin{DoxyCompactList}\small\item\em Parse an argument like \char`\"{}1234\char`\"{}, \char`\"{}\+T1234\char`\"{}, \char`\"{}t1234\char`\"{}, or \char`\"{}\+X1234\char`\"{}, \char`\"{}x1234\char`\"{}, as from OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T. \end{DoxyCompactList}\item 
unsigned long \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+val\+\_\+arg} (const char $\ast$val\+\_\+arg, unsigned long default\+\_\+val)
\begin{DoxyCompactList}\small\item\em Parse an argument of the form \char`\"{}(0-\/2147483647$\vert$default)\char`\"{}, as from OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init} (unsigned int parent\+\_\+cfg\+\_\+node, struct \textbf{ osmo\+\_\+tdef\+\_\+group} $\ast$groups)
\begin{DoxyCompactList}\small\item\em Convenience implementation for keeping a fixed set of timer groups in a program. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write} (struct \textbf{ vty} $\ast$\textbf{ vty}, const char $\ast$indent)
\begin{DoxyCompactList}\small\item\em Write the global \textbf{ osmo\+\_\+tdef\+\_\+group} configuration to VTY, as previously passed to \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}{p.}{group__Tdef__VTY_ga7deb1e36c8f098f16f0a344b3039088c}. \end{DoxyCompactList}\item 
static int \textbf{ get\+\_\+num\+\_\+cpus} (void)
\item 
static int \textbf{ parse\+\_\+cpu\+\_\+hex\+\_\+mask} (const char $\ast$str, cpu\+\_\+set\+\_\+t $\ast$cpuset, size\+\_\+t cpuset\+\_\+size)
\item 
static int \textbf{ generate\+\_\+cpu\+\_\+hex\+\_\+mask} (char $\ast$str, size\+\_\+t str\+\_\+buf\+\_\+size, cpu\+\_\+set\+\_\+t $\ast$cpuset, size\+\_\+t cpuset\+\_\+size)
\item 
static bool \textbf{ proc\+\_\+tid\+\_\+exists} (pid\+\_\+t tid)
\item 
static bool \textbf{ proc\+\_\+name\+\_\+exists} (const char $\ast$\textbf{ name}, pid\+\_\+t $\ast$res\+\_\+pid)
\item 
static enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id} \textbf{ procname2pid} (pid\+\_\+t $\ast$res\+\_\+pid, const char $\ast$str, bool applynow)
\item 
static int \textbf{ my\+\_\+sched\+\_\+setaffinity} (enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id} tid\+\_\+type, pid\+\_\+t \textbf{ pid}, cpu\+\_\+set\+\_\+t $\ast$cpuset, size\+\_\+t cpuset\+\_\+size)
\item 
\textbf{ DEFUN\+\_\+\+ATTR} (cfg\+\_\+sched\+\_\+cpu\+\_\+affinity, cfg\+\_\+sched\+\_\+cpu\+\_\+affinity\+\_\+cmd, \char`\"{}cpu-\/affinity (self$\vert$all$\vert$$<$0-\/4294967295$>$$\vert$THREADNAME) CPUHEXMASK [delay]\char`\"{}, \char`\"{}Set CPU affinity mask on a (group of) thread(s)\textbackslash{}\textbf{ n}\char`\"{} \char`\"{}Set CPU affinity mask on thread running the \textbf{ VTY\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on all process\textquotesingle{} \textbf{ threads\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on a thread with specified \textbf{ PID\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on a thread with specified thread \textbf{ name\textbackslash{}n}\char`\"{} \char`\"{}CPU affinity \textbf{ mask\textbackslash{}n}\char`\"{} \char`\"{}If set, delay applying the affinity mask now and let the app handle it at a later \textbf{ point\textbackslash{}n}\char`\"{}, CMD\+\_\+\+ATTR\+\_\+\+IMMEDIATE)
\item 
static int \textbf{ set\+\_\+sched\+\_\+rr} (unsigned int prio)
\item 
\textbf{ DEFUN\+\_\+\+ATTR} (cfg\+\_\+sched\+\_\+policy, cfg\+\_\+sched\+\_\+policy\+\_\+cmd, \char`\"{}policy rr $<$1-\/32$>$\char`\"{}, \char`\"{}Set the scheduling policy to use \textbf{ for} the \textbf{ process\textbackslash{}n}\char`\"{} \char`\"{}Use the SCHED\+\_\+\+RR real-\/\textbf{ time} scheduling \textbf{ algorithm\textbackslash{}n}\char`\"{} \char`\"{}Set the SCHED\+\_\+\+RR real-\/\textbf{ time} \textbf{ priority\textbackslash{}n}\char`\"{}, CMD\+\_\+\+ATTR\+\_\+\+IMMEDIATE)
\item 
\textbf{ DEFUN} (cfg\+\_\+sched, cfg\+\_\+sched\+\_\+cmd, \char`\"{}cpu-\/sched\char`\"{}, \char`\"{}Configure CPU Scheduler related settings\char`\"{})
\item 
\textbf{ DEFUN} (show\+\_\+sched\+\_\+threads, show\+\_\+sched\+\_\+threads\+\_\+cmd, \char`\"{}show cpu-\/sched threads\char`\"{}, SHOW\+\_\+\+STR \char`\"{}Show Sched section \textbf{ information\textbackslash{}n}\char`\"{} \char`\"{}Show information about running threads)\textbackslash{}\textbf{ n}\char`\"{})
\item 
static int \textbf{ config\+\_\+write\+\_\+sched} (struct \textbf{ vty} $\ast$\textbf{ vty})
\item 
int \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+init} (void $\ast$tall\+\_\+ctx)
\begin{DoxyCompactList}\small\item\em Initialize sched VTY nodes. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+apply\+\_\+localthread} (void)
\begin{DoxyCompactList}\small\item\em Apply cpu-\/affinity on calling thread based on VTY configuration. \end{DoxyCompactList}\item 
\textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each} (\textbf{ g}, \textbf{ global\+\_\+tdef\+\_\+groups})
\item 
\textbf{ if} (\textbf{ argc}$<$ 3) return show\+\_\+timer(self
\item 
return \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd} (\textbf{ vty}, \textbf{ tdefs}, \textbf{ timer\+\_\+args})
\item 
static char $\ast$ \textbf{ add\+\_\+group\+\_\+args} (void $\ast$talloc\+\_\+ctx, char $\ast$dest)
\item 
static char $\ast$ \textbf{ add\+\_\+group\+\_\+docs} (void $\ast$talloc\+\_\+ctx, char $\ast$dest)
\item 
static char $\ast$ \textbf{ timer\+\_\+command\+\_\+string} (const char $\ast$prefix, const char $\ast$suffix)
\item 
static char $\ast$ \textbf{ timer\+\_\+doc\+\_\+string} (const char $\ast$prefix, const char $\ast$suffix)
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static struct \textbf{ sched\+\_\+vty\+\_\+opts} $\ast$ \textbf{ sched\+\_\+vty\+\_\+opts}
\item 
static struct \textbf{ cmd\+\_\+node} \textbf{ sched\+\_\+node}
\item 
static struct \textbf{ osmo\+\_\+tdef\+\_\+group} $\ast$ \textbf{ global\+\_\+tdef\+\_\+groups}
\begin{DoxyCompactList}\small\item\em Singleton Tnnn groups definition as set by \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}{p.}{group__Tdef__VTY_ga7deb1e36c8f098f16f0a344b3039088c}. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ T\+\_\+arg} = \textbf{ argc} $>$ 1 ? \textbf{ argv}[1] \+: NULL
\item 
struct \textbf{ osmo\+\_\+tdef\+\_\+group} $\ast$ \textbf{ g} = NULL
\item 
return \textbf{ CMD\+\_\+\+SUCCESS}
\item 
const char $\ast$$\ast$ \textbf{ timer\+\_\+args}
\item 
struct \textbf{ osmo\+\_\+tdef} $\ast$ \textbf{ tdefs} = NULL
\item 
\textbf{ vty}
\item 
\textbf{ argc}
\item 
\textbf{ argv}
\item 
\textbf{ group\+\_\+arg} = \textbf{ argv}[0]
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
CPU Scheduling related VTY API. 

VTY API for \textbf{ Tnnn timer configuration}.

\doxysubsection{Macro Definition Documentation}
\mbox{\label{group__Tdef__VTY_ga199d76d665d4b4f292be1de7c9a4be28}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_SET@{OSMO\_TDEF\_VTY\_ARG\_SET}}
\index{OSMO\_TDEF\_VTY\_ARG\_SET@{OSMO\_TDEF\_VTY\_ARG\_SET}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_SET}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+SET~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T} \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL}}

\mbox{\label{group__Tdef__VTY_ga5525deaed5afc45e71382a6965834c73}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_SET\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_SET\_OPTIONAL}}
\index{OSMO\_TDEF\_VTY\_ARG\_SET\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_SET\_OPTIONAL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_SET\_OPTIONAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+SET\+\_\+\+OPTIONAL~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+T\+\_\+\+OPTIONAL} \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL\+\_\+\+OPTIONAL}}

\mbox{\label{group__Tdef__VTY_ga03037520339529e8752fcde84dc62a72}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_T@{OSMO\_TDEF\_VTY\_ARG\_T}}
\index{OSMO\_TDEF\_VTY\_ARG\_T@{OSMO\_TDEF\_VTY\_ARG\_T}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_T}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T~\char`\"{}TNNNN\char`\"{}}

\mbox{\label{group__Tdef__VTY_ga359341150966aa806cbe8ff76c3bb594}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_T\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_T\_OPTIONAL}}
\index{OSMO\_TDEF\_VTY\_ARG\_T\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_T\_OPTIONAL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_T\_OPTIONAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+T\+\_\+\+OPTIONAL~\char`\"{}[\char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T} \char`\"{}]\char`\"{}}

\mbox{\label{group__Tdef__VTY_ga59b2b018560574feeccb9021042b1b7e}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_VAL@{OSMO\_TDEF\_VTY\_ARG\_VAL}}
\index{OSMO\_TDEF\_VTY\_ARG\_VAL@{OSMO\_TDEF\_VTY\_ARG\_VAL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_VAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL~\char`\"{}($<$0-\/2147483647$>$$\vert$default)\char`\"{}}

\mbox{\label{group__Tdef__VTY_gabb15b9512bc564b2e4e343492b774291}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_ARG\_VAL\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_VAL\_OPTIONAL}}
\index{OSMO\_TDEF\_VTY\_ARG\_VAL\_OPTIONAL@{OSMO\_TDEF\_VTY\_ARG\_VAL\_OPTIONAL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_ARG\_VAL\_OPTIONAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL\+\_\+\+OPTIONAL~\char`\"{}[\char`\"{} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL} \char`\"{}]\char`\"{}}

\mbox{\label{group__Tdef__VTY_gaa2e9cc7aa59d3c340402c4423e3c0dbd}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_DOC\_SET@{OSMO\_TDEF\_VTY\_DOC\_SET}}
\index{OSMO\_TDEF\_VTY\_DOC\_SET@{OSMO\_TDEF\_VTY\_DOC\_SET}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_DOC\_SET}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+SET~\textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+T} \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+VAL}}

\mbox{\label{group__Tdef__VTY_ga0aad33b597ba68173c1b1449b380f312}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_DOC\_T@{OSMO\_TDEF\_VTY\_DOC\_T}}
\index{OSMO\_TDEF\_VTY\_DOC\_T@{OSMO\_TDEF\_VTY\_DOC\_T}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_DOC\_T}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+T}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}T-\/ or X-\/timer-\/number -\/-\/ 3GPP compliant timer number of the format '1234' or 'T1234' or 't1234';"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{} Osmocom-\/specific timer number of the format: 'X1234' or 'x1234'.\(\backslash\)n"{}}}

\end{DoxyCode}
\mbox{\label{group__Tdef__VTY_ga9cc84c575e34de36af8d7741929d9224}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!OSMO\_TDEF\_VTY\_DOC\_VAL@{OSMO\_TDEF\_VTY\_DOC\_VAL}}
\index{OSMO\_TDEF\_VTY\_DOC\_VAL@{OSMO\_TDEF\_VTY\_DOC\_VAL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{OSMO\_TDEF\_VTY\_DOC\_VAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+VAL~\char`\"{}New timer \textbf{ value\textbackslash{}n}\char`\"{} \char`\"{}Set to default timer \textbf{ value\textbackslash{}n}\char`\"{}}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{group__Tdef__VTY_ga242cd669789bffc6ac6f1782472e29e7}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!sched\_vty\_thread\_id@{sched\_vty\_thread\_id}}
\index{sched\_vty\_thread\_id@{sched\_vty\_thread\_id}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{sched\_vty\_thread\_id}
{\footnotesize\ttfamily enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{SCHED\_VTY\_THREAD\_SELF@{SCHED\_VTY\_THREAD\_SELF}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!SCHED\_VTY\_THREAD\_SELF@{SCHED\_VTY\_THREAD\_SELF}}}\mbox{\label{group__Tdef__VTY_gga242cd669789bffc6ac6f1782472e29e7ac638dc8e7d284fe60931af20cf2d086c}} 
SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+SELF&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SCHED\_VTY\_THREAD\_ALL@{SCHED\_VTY\_THREAD\_ALL}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!SCHED\_VTY\_THREAD\_ALL@{SCHED\_VTY\_THREAD\_ALL}}}\mbox{\label{group__Tdef__VTY_gga242cd669789bffc6ac6f1782472e29e7a3fb84aead89492628138cd0dba489681}} 
SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SCHED\_VTY\_THREAD\_ID@{SCHED\_VTY\_THREAD\_ID}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!SCHED\_VTY\_THREAD\_ID@{SCHED\_VTY\_THREAD\_ID}}}\mbox{\label{group__Tdef__VTY_gga242cd669789bffc6ac6f1782472e29e7a643739f715b5eeb90852335a40fada8e}} 
SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ID&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SCHED\_VTY\_THREAD\_NAME@{SCHED\_VTY\_THREAD\_NAME}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!SCHED\_VTY\_THREAD\_NAME@{SCHED\_VTY\_THREAD\_NAME}}}\mbox{\label{group__Tdef__VTY_gga242cd669789bffc6ac6f1782472e29e7a6b078bd43cf2ce61069df1c684c72ab6}} 
SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+NAME&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SCHED\_VTY\_THREAD\_UNKNOWN@{SCHED\_VTY\_THREAD\_UNKNOWN}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!SCHED\_VTY\_THREAD\_UNKNOWN@{SCHED\_VTY\_THREAD\_UNKNOWN}}}\mbox{\label{group__Tdef__VTY_gga242cd669789bffc6ac6f1782472e29e7a0d47ad09b3c4894354f1fef52a205852}} 
SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+UNKNOWN&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{group__Tdef__VTY_ga644cf50fe5fa5082a65e5d8c0ce802b1}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!add\_group\_args@{add\_group\_args}}
\index{add\_group\_args@{add\_group\_args}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{add\_group\_args()}
{\footnotesize\ttfamily static char $\ast$ add\+\_\+group\+\_\+args (\begin{DoxyParamCaption}\item[{void $\ast$}]{talloc\+\_\+ctx,  }\item[{char $\ast$}]{dest }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ g}, \textbf{ global\+\_\+tdef\+\_\+groups}, \textbf{ osmo\+\_\+tdef\+\_\+group\+::name}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, and \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}.



Referenced by \textbf{ timer\+\_\+command\+\_\+string()}.

\mbox{\label{group__Tdef__VTY_ga98070930a35baee1814561b5aea02f9d}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!add\_group\_docs@{add\_group\_docs}}
\index{add\_group\_docs@{add\_group\_docs}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{add\_group\_docs()}
{\footnotesize\ttfamily static char $\ast$ add\+\_\+group\+\_\+docs (\begin{DoxyParamCaption}\item[{void $\ast$}]{talloc\+\_\+ctx,  }\item[{char $\ast$}]{dest }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+tdef\+\_\+group\+::desc}, \textbf{ g}, \textbf{ global\+\_\+tdef\+\_\+groups}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, and \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}.



Referenced by \textbf{ timer\+\_\+doc\+\_\+string()}.

\mbox{\label{group__Tdef__VTY_ga54487e84b95e80d808151f36c1f03218}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!config\_write\_sched@{config\_write\_sched}}
\index{config\_write\_sched@{config\_write\_sched}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{config\_write\_sched()}
{\footnotesize\ttfamily static int config\+\_\+write\+\_\+sched (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cpu\+\_\+affinity\+\_\+it\+::bufname}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset\+\_\+size}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::delay}, \textbf{ entry}, \textbf{ generate\+\_\+cpu\+\_\+hex\+\_\+mask()}, \textbf{ llist\+\_\+empty()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ OSMO\+\_\+\+STRLCPY\+\_\+\+ARRAY}, \textbf{ sched\+\_\+vty\+\_\+opts\+::sched\+\_\+rr\+\_\+prio}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+init()}.

\mbox{\label{group__Tdef__VTY_ga92039946155ce45618a07d721db4b73b}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+sched}]{,  }\item[{cfg\+\_\+sched\+\_\+cmd}]{,  }\item[{\char`\"{}cpu-\/sched\char`\"{}}]{,  }\item[{\char`\"{}Configure CPU Scheduler related settings\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ vty\+::index}, \textbf{ L\+\_\+\+CPU\+\_\+\+SCHED\+\_\+\+NODE}, and \textbf{ vty\+::node}.

\mbox{\label{group__Tdef__VTY_ga23de11deb5e1413427b393f992ca744d}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{show\+\_\+sched\+\_\+threads}]{,  }\item[{show\+\_\+sched\+\_\+threads\+\_\+cmd}]{,  }\item[{\char`\"{}show cpu-\/sched threads\char`\"{}}]{,  }\item[{\textbf{ SHOW\+\_\+\+STR} \char`\"{}Show Sched section \textbf{ information\textbackslash{}n}\char`\"{} \char`\"{}Show information about running}]{threads }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ entry}, \textbf{ fd}, \textbf{ generate\+\_\+cpu\+\_\+hex\+\_\+mask()}, \textbf{ get\+\_\+num\+\_\+cpus()}, \textbf{ name}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{group__Tdef__VTY_ga3b45dca14e63cfbb59fb4291f884f223}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!DEFUN\_ATTR@{DEFUN\_ATTR}}
\index{DEFUN\_ATTR@{DEFUN\_ATTR}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{DEFUN\_ATTR()\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily DEFUN\+\_\+\+ATTR (\begin{DoxyParamCaption}\item[{cfg\+\_\+sched\+\_\+cpu\+\_\+affinity}]{,  }\item[{cfg\+\_\+sched\+\_\+cpu\+\_\+affinity\+\_\+cmd}]{,  }\item[{\char`\"{}cpu-\/affinity (self$\vert$all$\vert$$<$0-\/4294967295$>$$\vert$THREADNAME) CPUHEXMASK \char`\"{}}]{[delay],  }\item[{\char`\"{}Set CPU affinity mask on a (group of) thread(s)\textbackslash{}\textbf{ n}\char`\"{} \char`\"{}Set CPU affinity mask on thread running the \textbf{ VTY\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on all process\textquotesingle{} \textbf{ threads\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on a thread with specified \textbf{ PID\textbackslash{}n}\char`\"{} \char`\"{}Set CPU affinity mask on a thread with specified thread \textbf{ name\textbackslash{}n}\char`\"{} \char`\"{}CPU affinity \textbf{ mask\textbackslash{}n}\char`\"{} \char`\"{}If}]{set,  }\item[{delay applying the affinity mask now and let the app handle it at a later \textbf{ point\textbackslash{}n}\char`\"{}}]{,  }\item[{\textbf{ CMD\+\_\+\+ATTR\+\_\+\+IMMEDIATE}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::bufname}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li\+\_\+mutex}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset\+\_\+size}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::delay}, \textbf{ entry}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::entry}, \textbf{ get\+\_\+num\+\_\+cpus()}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ llist\+\_\+del()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ my\+\_\+sched\+\_\+setaffinity()}, \textbf{ OSMO\+\_\+\+STRLCPY\+\_\+\+ARRAY}, \textbf{ parse\+\_\+cpu\+\_\+hex\+\_\+mask()}, \textbf{ pid}, \textbf{ procname2pid()}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ID}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+NAME}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+SELF}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+UNKNOWN}, \textbf{ sched\+\_\+vty\+\_\+opts\+::tall\+\_\+ctx}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::tid\+\_\+type}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{group__Tdef__VTY_ga67eff342bcf23ef638ea1b6b70dbc1f7}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!DEFUN\_ATTR@{DEFUN\_ATTR}}
\index{DEFUN\_ATTR@{DEFUN\_ATTR}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{DEFUN\_ATTR()\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily DEFUN\+\_\+\+ATTR (\begin{DoxyParamCaption}\item[{cfg\+\_\+sched\+\_\+policy}]{,  }\item[{cfg\+\_\+sched\+\_\+policy\+\_\+cmd}]{,  }\item[{\char`\"{}policy rr $<$1-\/32$>$\char`\"{}}]{,  }\item[{\char`\"{}Set the scheduling policy to use \textbf{ for} the \textbf{ process\textbackslash{}n}\char`\"{} \char`\"{}Use the SCHED\+\_\+\+RR real-\/\textbf{ time} scheduling \textbf{ algorithm\textbackslash{}n}\char`\"{} \char`\"{}Set the SCHED\+\_\+\+RR real-\/\textbf{ time} \textbf{ priority\textbackslash{}n}\char`\"{}}]{,  }\item[{\textbf{ CMD\+\_\+\+ATTR\+\_\+\+IMMEDIATE}}]{ }\end{DoxyParamCaption})}



References \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ sched\+\_\+vty\+\_\+opts\+::sched\+\_\+rr\+\_\+prio}, \textbf{ set\+\_\+sched\+\_\+rr()}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{group__Tdef__VTY_ga67590c21d081349bd82718c34b3cc479}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!generate\_cpu\_hex\_mask@{generate\_cpu\_hex\_mask}}
\index{generate\_cpu\_hex\_mask@{generate\_cpu\_hex\_mask}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{generate\_cpu\_hex\_mask()}
{\footnotesize\ttfamily static int generate\+\_\+cpu\+\_\+hex\+\_\+mask (\begin{DoxyParamCaption}\item[{char $\ast$}]{str,  }\item[{size\+\_\+t}]{str\+\_\+buf\+\_\+size,  }\item[{cpu\+\_\+set\+\_\+t $\ast$}]{cpuset,  }\item[{size\+\_\+t}]{cpuset\+\_\+size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ config\+\_\+write\+\_\+sched()}, \textbf{ DEFUN()}, \textbf{ my\+\_\+sched\+\_\+setaffinity()}, and \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+apply\+\_\+localthread()}.

\mbox{\label{group__Tdef__VTY_ga2a48eb0ae3b7ef524ca63d66afda1e50}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!get\_num\_cpus@{get\_num\_cpus}}
\index{get\_num\_cpus@{get\_num\_cpus}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{get\_num\_cpus()}
{\footnotesize\ttfamily static int get\+\_\+num\+\_\+cpus (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ DLGLOBAL}, \textbf{ LOGL\+\_\+\+ERROR}, and \textbf{ LOGP}.



Referenced by \textbf{ DEFUN()}, \textbf{ DEFUN\+\_\+\+ATTR()}, and \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+init()}.

\mbox{\label{group__Tdef__VTY_gaa6d938dd851ca8d01111a3cc84a4c375}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!if@{if}}
\index{if@{if}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{if()}
{\footnotesize\ttfamily if (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

\mbox{\label{group__Tdef__VTY_gae3524adc0b504745178efefb1a284e3e}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!my\_sched\_setaffinity@{my\_sched\_setaffinity}}
\index{my\_sched\_setaffinity@{my\_sched\_setaffinity}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{my\_sched\_setaffinity()}
{\footnotesize\ttfamily static int my\+\_\+sched\+\_\+setaffinity (\begin{DoxyParamCaption}\item[{enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id}}]{tid\+\_\+type,  }\item[{pid\+\_\+t}]{pid,  }\item[{cpu\+\_\+set\+\_\+t $\ast$}]{cpuset,  }\item[{size\+\_\+t}]{cpuset\+\_\+size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ DLGLOBAL}, \textbf{ entry}, \textbf{ generate\+\_\+cpu\+\_\+hex\+\_\+mask()}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGP}, \textbf{ pid}, and \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL}.



Referenced by \textbf{ DEFUN\+\_\+\+ATTR()}, and \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+apply\+\_\+localthread()}.

\mbox{\label{group__Tdef__VTY_ga5eb944998ac87f1fed307eefdaa25a00}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_cpu\_sched\_vty\_apply\_localthread@{osmo\_cpu\_sched\_vty\_apply\_localthread}}
\index{osmo\_cpu\_sched\_vty\_apply\_localthread@{osmo\_cpu\_sched\_vty\_apply\_localthread}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_cpu\_sched\_vty\_apply\_localthread()}
{\footnotesize\ttfamily int osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+apply\+\_\+localthread (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Apply cpu-\/affinity on calling thread based on VTY configuration. 

\begin{DoxyReturn}{Returns}
0 on success, non-\/zero on error. 
\end{DoxyReturn}


References \textbf{ cpu\+\_\+affinity\+\_\+it\+::bufname}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li\+\_\+mutex}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset}, \textbf{ cpu\+\_\+affinity\+\_\+it\+::cpuset\+\_\+size}, \textbf{ DLGLOBAL}, \textbf{ entry}, \textbf{ generate\+\_\+cpu\+\_\+hex\+\_\+mask()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ LOGL\+\_\+\+FATAL}, \textbf{ LOGP}, \textbf{ my\+\_\+sched\+\_\+setaffinity()}, \textbf{ name}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+NAME}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+SELF}, and \textbf{ cpu\+\_\+affinity\+\_\+it\+::tid\+\_\+type}.

\mbox{\label{group__Tdef__VTY_gadc133d63fa1bd8535201dcaa78a4d800}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_cpu\_sched\_vty\_init@{osmo\_cpu\_sched\_vty\_init}}
\index{osmo\_cpu\_sched\_vty\_init@{osmo\_cpu\_sched\_vty\_init}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_cpu\_sched\_vty\_init()}
{\footnotesize\ttfamily int osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+init (\begin{DoxyParamCaption}\item[{void $\ast$}]{tall\+\_\+ctx }\end{DoxyParamCaption})}



Initialize sched VTY nodes. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em tall\+\_\+ctx} & Talloc context to use internally by vty\+\_\+sched subsystem. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, non-\/zero on error. 
\end{DoxyReturn}


References \textbf{ CONFIG\+\_\+\+NODE}, \textbf{ config\+\_\+write\+\_\+sched()}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li}, \textbf{ sched\+\_\+vty\+\_\+opts\+::cpu\+\_\+affinity\+\_\+li\+\_\+mutex}, \textbf{ get\+\_\+num\+\_\+cpus()}, \textbf{ INIT\+\_\+\+LLIST\+\_\+\+HEAD}, \textbf{ install\+\_\+lib\+\_\+element()}, \textbf{ install\+\_\+lib\+\_\+element\+\_\+ve()}, \textbf{ install\+\_\+node()}, \textbf{ L\+\_\+\+CPU\+\_\+\+SCHED\+\_\+\+NODE}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ sched\+\_\+node}, and \textbf{ sched\+\_\+vty\+\_\+opts\+::tall\+\_\+ctx}.

\mbox{\label{group__Tdef__VTY_gac944e675764652c307e13be9419fde18}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_groups\_for\_each@{osmo\_tdef\_groups\_for\_each}}
\index{osmo\_tdef\_groups\_for\_each@{osmo\_tdef\_groups\_for\_each}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_groups\_for\_each()}
{\footnotesize\ttfamily osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each (\begin{DoxyParamCaption}\item[{\textbf{ g}}]{,  }\item[{\textbf{ global\+\_\+tdef\+\_\+groups}}]{ }\end{DoxyParamCaption})}



References \textbf{ g}, \textbf{ group\+\_\+arg}, \textbf{ osmo\+\_\+tdef\+\_\+group\+::name}, \textbf{ osmo\+\_\+str\+\_\+startswith()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}, \textbf{ T\+\_\+arg}, and \textbf{ osmo\+\_\+tdef\+\_\+group\+::tdefs}.



Referenced by \textbf{ add\+\_\+group\+\_\+args()}, \textbf{ add\+\_\+group\+\_\+docs()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write()}.

\mbox{\label{group__Tdef__VTY_ga7deb1e36c8f098f16f0a344b3039088c}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_groups\_init@{osmo\_tdef\_vty\_groups\_init}}
\index{osmo\_tdef\_vty\_groups\_init@{osmo\_tdef\_vty\_groups\_init}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_groups\_init()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init (\begin{DoxyParamCaption}\item[{unsigned int}]{parent\+\_\+cfg\+\_\+node,  }\item[{struct \textbf{ osmo\+\_\+tdef\+\_\+group} $\ast$}]{groups }\end{DoxyParamCaption})}



Convenience implementation for keeping a fixed set of timer groups in a program. 

Install a \textquotesingle{}timer [(group$\vert$names$\vert$...)] [TNNN] [($<$val$>$$\vert$default)]\textquotesingle{} command under the given parent\+\_\+node, and install a \textquotesingle{}show timer...\textquotesingle{} command on VIEW\+\_\+\+NODE and ENABLE\+\_\+\+NODE. For a usage example, see \textbf{ tdef\+\_\+test\+\_\+config\+\_\+root\+::c}. The given timer definitions group is stored in a global pointer, so this can be done only once per main() scope. It would also be possible to have distinct timer groups on separate VTY subnodes, with a \char`\"{}manual\char`\"{} implementation, but not with this API. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em parent\+\_\+cfg\+\_\+node} & VTY node at which to add the timer configuration commands, e.\+g. CONFIG\+\_\+\+NODE. \\
\hline
\mbox{\texttt{ in}}  & {\em groups} & Global timer groups definition. \\
\hline
\end{DoxyParams}


References \textbf{ g}, \textbf{ global\+\_\+tdef\+\_\+groups}, \textbf{ install\+\_\+lib\+\_\+element()}, \textbf{ install\+\_\+lib\+\_\+element\+\_\+ve()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}, \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+SET\+\_\+\+OPTIONAL}, \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+T\+\_\+\+OPTIONAL}, \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+\+SET}, \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+DOC\+\_\+T}, \textbf{ osmo\+\_\+tdefs\+\_\+reset()}, \textbf{ SHOW\+\_\+\+STR}, \textbf{ osmo\+\_\+tdef\+\_\+group\+::tdefs}, \textbf{ timer\+\_\+command\+\_\+string()}, and \textbf{ timer\+\_\+doc\+\_\+string()}.

\mbox{\label{group__Tdef__VTY_ga545bd0159b78e0bd6c82545fe25f9e34}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_groups\_write@{osmo\_tdef\_vty\_groups\_write}}
\index{osmo\_tdef\_vty\_groups\_write@{osmo\_tdef\_vty\_groups\_write}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_groups\_write()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const char $\ast$}]{indent }\end{DoxyParamCaption})}



Write the global \textbf{ osmo\+\_\+tdef\+\_\+group} configuration to VTY, as previously passed to \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}{p.}{group__Tdef__VTY_ga7deb1e36c8f098f16f0a344b3039088c}. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context. \\
\hline
\mbox{\texttt{ in}}  & {\em indent} & String to print before each line. \\
\hline
\end{DoxyParams}


References \textbf{ g}, \textbf{ global\+\_\+tdef\+\_\+groups}, \textbf{ osmo\+\_\+tdef\+\_\+group\+::name}, \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+write()}, and \textbf{ osmo\+\_\+tdef\+\_\+group\+::tdefs}.

\mbox{\label{group__Tdef__VTY_ga104eeb939ad29435ae61c8e53cfe2917}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_out\_all@{osmo\_tdef\_vty\_out\_all}}
\index{osmo\_tdef\_vty\_out\_all@{osmo\_tdef\_vty\_out\_all}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_out\_all()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Write to VTY the current status of all given timers. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88}. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timers to print, ended with a fully zero-\/initialized entry. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable printf like arguments. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va()}, and \textbf{ tdefs}.

\mbox{\label{group__Tdef__VTY_ga39222ed094ec36a42ed2effa9166bc23}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_out\_all\_va@{osmo\_tdef\_vty\_out\_all\_va}}
\index{osmo\_tdef\_vty\_out\_all\_va@{osmo\_tdef\_vty\_out\_all\_va}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_out\_all\_va()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{va\+\_\+list}]{va }\end{DoxyParamCaption})}



Write to VTY the current status of all given timers. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88}. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timers to print, ended with a fully zero-\/initialized entry. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable vprintf like arguments. \\
\hline
\mbox{\texttt{ in}}  & {\em va} & va\+\_\+list instance. As always, call va\+\_\+start() before, and va\+\_\+end() after this call. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+tdef\+\_\+for\+\_\+each}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one\+\_\+va()}, \textbf{ tdefs}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_ga23aaf3b18922833bdf53aa0d95c49c42}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_out\_one@{osmo\_tdef\_vty\_out\_one}}
\index{osmo\_tdef\_vty\_out\_one@{osmo\_tdef\_vty\_out\_one}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_out\_one()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{t,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Write to VTY the current status of one timer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88}. \\
\hline
\mbox{\texttt{ in}}  & {\em t} & The timer to print. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable printf like arguments. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one\+\_\+va()}.

\mbox{\label{group__Tdef__VTY_ga7175a909a309b1b3d9b9969e81806332}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_out\_one\_va@{osmo\_tdef\_vty\_out\_one\_va}}
\index{osmo\_tdef\_vty\_out\_one\_va@{osmo\_tdef\_vty\_out\_one\_va}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_out\_one\_va()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one\+\_\+va (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{t,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{va\+\_\+list}]{va }\end{DoxyParamCaption})}



Write to VTY the current status of one timer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88}. \\
\hline
\mbox{\texttt{ in}}  & {\em t} & The timer to print. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable vprintf like arguments. \\
\hline
\mbox{\texttt{ in}}  & {\em va} & va\+\_\+list instance. As always, call va\+\_\+start() before, and va\+\_\+end() after this call. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+tdef\+::default\+\_\+val}, \textbf{ osmo\+\_\+tdef\+::desc}, \textbf{ osmo\+\_\+tdef\+::max\+\_\+val}, \textbf{ osmo\+\_\+tdef\+::min\+\_\+val}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT\+\_\+\+ARGS}, \textbf{ OSMO\+\_\+\+TDEF\+\_\+\+CUSTOM}, \textbf{ osmo\+\_\+tdef\+\_\+range\+\_\+str\+\_\+buf()}, \textbf{ osmo\+\_\+tdef\+\_\+unit\+\_\+name()}, \textbf{ osmo\+\_\+tdef\+::T}, \textbf{ osmo\+\_\+tdef\+::unit}, \textbf{ osmo\+\_\+tdef\+::val}, \textbf{ VTY\+\_\+\+NEWLINE}, \textbf{ vty\+\_\+out()}, and \textbf{ vty\+\_\+out\+\_\+va()}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_ga0204245dff780598621c0afceae510a6}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_parse\_T\_arg@{osmo\_tdef\_vty\_parse\_T\_arg}}
\index{osmo\_tdef\_vty\_parse\_T\_arg@{osmo\_tdef\_vty\_parse\_T\_arg}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_parse\_T\_arg()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+tdef} $\ast$ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$}]{T\+\_\+str }\end{DoxyParamCaption})}



Parse an argument like \char`\"{}1234\char`\"{}, \char`\"{}\+T1234\char`\"{}, \char`\"{}t1234\char`\"{}, or \char`\"{}\+X1234\char`\"{}, \char`\"{}x1234\char`\"{}, as from OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+T. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88} of error messages. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timer definitions to look up T timer. \\
\hline
\mbox{\texttt{ in}}  & {\em T\+\_\+str} & Argument string. It is not validated, expected to be checked by VTY input. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the corresponding \textbf{ osmo\+\_\+tdef} entry from the tdefs array, or NULL if no such entry exists. 
\end{DoxyReturn}


References \textbf{ l}, \textbf{ osmo\+\_\+str\+\_\+to\+\_\+int()}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT\+\_\+\+ARGS}, \textbf{ osmo\+\_\+tdef\+\_\+get\+\_\+entry()}, \textbf{ osmo\+\_\+tdef\+::T}, \textbf{ tdefs}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_gac7814ad23ac2e809432d7962dca420a6}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_parse\_val\_arg@{osmo\_tdef\_vty\_parse\_val\_arg}}
\index{osmo\_tdef\_vty\_parse\_val\_arg@{osmo\_tdef\_vty\_parse\_val\_arg}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_parse\_val\_arg()}
{\footnotesize\ttfamily unsigned long osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+val\+\_\+arg (\begin{DoxyParamCaption}\item[{const char $\ast$}]{val\+\_\+arg,  }\item[{unsigned long}]{default\+\_\+val }\end{DoxyParamCaption})}



Parse an argument of the form \char`\"{}(0-\/2147483647$\vert$default)\char`\"{}, as from OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARG\+\_\+\+VAL. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em val\+\_\+arg} & Argument string (not format checked). \\
\hline
\mbox{\texttt{ in}}  & {\em default\+\_\+val} & Value to return in case of val\+\_\+arg being \char`\"{}default\char`\"{}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Parsed value or default\+\_\+val. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+tdef\+::default\+\_\+val}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_gaad9b0be80f076c1e183845ee761adcfb}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_set\_cmd@{osmo\_tdef\_vty\_set\_cmd}}
\index{osmo\_tdef\_vty\_set\_cmd@{osmo\_tdef\_vty\_set\_cmd}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_set\_cmd()\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily int osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$$\ast$}]{args }\end{DoxyParamCaption})}



Apply a timer configuration from VTY argument strings. 

Employ both \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg()}{p.}{group__Tdef__VTY_ga0204245dff780598621c0afceae510a6} and \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+val\+\_\+arg()}{p.}{group__Tdef__VTY_gac7814ad23ac2e809432d7962dca420a6} to configure a T timer in an array of tdefs. Evaluate two arguments, a \char`\"{}\+T1234\char`\"{} argument and a \char`\"{}(0-\/2147483647$\vert$default)\char`\"{} argument, as from OSMO\+\_\+\+TDEF\+\_\+\+VTY\+\_\+\+ARGS. If the T timer given in the first argument is found in tdefs, set it to the value given in the second argument. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88} of error messages. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timer definitions to look up T timer. \\
\hline
\mbox{\texttt{ in}}  & {\em args} & Array of string arguments like \{ \char`\"{}\+T1234\char`\"{}, \char`\"{}23\char`\"{} \}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
CMD\+\_\+\+SUCCESS, or CMD\+\_\+\+WARNING if no such timer is found in tdefs. 
\end{DoxyReturn}


References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ osmo\+\_\+tdef\+::default\+\_\+val}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT\+\_\+\+ARGS}, \textbf{ osmo\+\_\+tdef\+\_\+range\+\_\+str\+\_\+buf()}, \textbf{ osmo\+\_\+tdef\+\_\+val\+\_\+in\+\_\+range()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+val\+\_\+arg()}, \textbf{ osmo\+\_\+tdef\+::T}, \textbf{ T\+\_\+arg}, \textbf{ tdefs}, \textbf{ osmo\+\_\+tdef\+::val}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{group__Tdef__VTY_gae7b3cc14c1d78b7db4d12930fa0dd517}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_set\_cmd@{osmo\_tdef\_vty\_set\_cmd}}
\index{osmo\_tdef\_vty\_set\_cmd@{osmo\_tdef\_vty\_set\_cmd}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_set\_cmd()\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily return osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd (\begin{DoxyParamCaption}\item[{\textbf{ vty}}]{,  }\item[{\textbf{ tdefs}}]{,  }\item[{\textbf{ timer\+\_\+args}}]{ }\end{DoxyParamCaption})}

\mbox{\label{group__Tdef__VTY_ga2f02c6fadab083fe84980b90eb073e63}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_show\_cmd@{osmo\_tdef\_vty\_show\_cmd}}
\index{osmo\_tdef\_vty\_show\_cmd@{osmo\_tdef\_vty\_show\_cmd}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_show\_cmd()}
{\footnotesize\ttfamily int osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$}]{T\+\_\+arg,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Output one or all timers to the VTY, as for a VTY command like \textquotesingle{}show timer [TNNNN]\textquotesingle{}. 

If T\+\_\+arg is NULL, print all timers in tdefs to the VTY. If T\+\_\+arg is not NULL, employ \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg()}{p.}{group__Tdef__VTY_ga0204245dff780598621c0afceae510a6} to select one timer from tdefs and print only that to the VTY. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context for \doxyref{vty\+\_\+out()}{p.}{group__vty_gae8f16c68278d5bfe8d00ade3c4323e88} of error messages. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timer definitions. \\
\hline
\mbox{\texttt{ in}}  & {\em T\+\_\+arg} & Argument string like \char`\"{}\+T1234\char`\"{}, or NULL. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable printf like arguments. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
CMD\+\_\+\+SUCCESS, or CMD\+\_\+\+WARNING if no such timer is found in tdefs. 
\end{DoxyReturn}


References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+one\+\_\+va()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg()}, \textbf{ T\+\_\+arg}, and \textbf{ tdefs}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}.

\mbox{\label{group__Tdef__VTY_ga15e8d88f4f9b620d843dec583ccf89ea}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!osmo\_tdef\_vty\_write@{osmo\_tdef\_vty\_write}}
\index{osmo\_tdef\_vty\_write@{osmo\_tdef\_vty\_write}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{osmo\_tdef\_vty\_write()}
{\footnotesize\ttfamily void osmo\+\_\+tdef\+\_\+vty\+\_\+write (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ osmo\+\_\+tdef} $\ast$}]{tdefs,  }\item[{const char $\ast$}]{prefix\+\_\+fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Write current timer configuration arguments to the vty. 

Skip all entries that reflect their default value. The passed prefix string must contain both necessary indent and the VTY command the specific implementation is using. See tdef\+\_\+vty\+\_\+config\+\_\+subnode\+\_\+test.\+c and tdef\+\_\+vty\+\_\+dynamic\+\_\+test.\+c for examples. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY context. \\
\hline
\mbox{\texttt{ in}}  & {\em tdefs} & Array of timers to print, ended with a fully zero-\/initialized entry. \\
\hline
\mbox{\texttt{ in}}  & {\em prefix\+\_\+fmt} & Arbitrary string to start each line with, with variable printf like arguments. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+tdef\+::default\+\_\+val}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT}, \textbf{ OSMO\+\_\+\+T\+\_\+\+FMT\+\_\+\+ARGS}, \textbf{ osmo\+\_\+tdef\+\_\+for\+\_\+each}, \textbf{ osmo\+\_\+tdef\+::T}, \textbf{ tdefs}, \textbf{ osmo\+\_\+tdef\+::val}, \textbf{ VTY\+\_\+\+NEWLINE}, \textbf{ vty\+\_\+out()}, and \textbf{ vty\+\_\+out\+\_\+va()}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write()}.

\mbox{\label{group__Tdef__VTY_ga78130134449a8c8bbf91cbf52f641abd}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!parse\_cpu\_hex\_mask@{parse\_cpu\_hex\_mask}}
\index{parse\_cpu\_hex\_mask@{parse\_cpu\_hex\_mask}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{parse\_cpu\_hex\_mask()}
{\footnotesize\ttfamily static int parse\+\_\+cpu\+\_\+hex\+\_\+mask (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str,  }\item[{cpu\+\_\+set\+\_\+t $\ast$}]{cpuset,  }\item[{size\+\_\+t}]{cpuset\+\_\+size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ c}, and \textbf{ len()}.



Referenced by \textbf{ DEFUN\+\_\+\+ATTR()}.

\mbox{\label{group__Tdef__VTY_ga7f3b1fcc27ef3d3bb08b3be01bdeffde}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!proc\_name\_exists@{proc\_name\_exists}}
\index{proc\_name\_exists@{proc\_name\_exists}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{proc\_name\_exists()}
{\footnotesize\ttfamily static bool proc\+\_\+name\+\_\+exists (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name,  }\item[{pid\+\_\+t $\ast$}]{res\+\_\+pid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ entry}, \textbf{ fd}, and \textbf{ name}.



Referenced by \textbf{ procname2pid()}.

\mbox{\label{group__Tdef__VTY_ga5650afa5c8a80c131a95f4162b436fb8}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!proc\_tid\_exists@{proc\_tid\_exists}}
\index{proc\_tid\_exists@{proc\_tid\_exists}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{proc\_tid\_exists()}
{\footnotesize\ttfamily static bool proc\+\_\+tid\+\_\+exists (\begin{DoxyParamCaption}\item[{pid\+\_\+t}]{tid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ entry}.



Referenced by \textbf{ procname2pid()}.

\mbox{\label{group__Tdef__VTY_ga11dc1eb708ee1fe9807a50d00bf6bb01}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!procname2pid@{procname2pid}}
\index{procname2pid@{procname2pid}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{procname2pid()}
{\footnotesize\ttfamily static enum \textbf{ sched\+\_\+vty\+\_\+thread\+\_\+id} procname2pid (\begin{DoxyParamCaption}\item[{pid\+\_\+t $\ast$}]{res\+\_\+pid,  }\item[{const char $\ast$}]{str,  }\item[{bool}]{applynow }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ len()}, \textbf{ osmo\+\_\+str\+\_\+to\+\_\+int64()}, \textbf{ proc\+\_\+name\+\_\+exists()}, \textbf{ proc\+\_\+tid\+\_\+exists()}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ALL}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+ID}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+NAME}, \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+SELF}, and \textbf{ SCHED\+\_\+\+VTY\+\_\+\+THREAD\+\_\+\+UNKNOWN}.



Referenced by \textbf{ DEFUN\+\_\+\+ATTR()}.

\mbox{\label{group__Tdef__VTY_ga6a1d2a3e59195f13a0f1b66e9d9174aa}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!set\_sched\_rr@{set\_sched\_rr}}
\index{set\_sched\_rr@{set\_sched\_rr}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{set\_sched\_rr()}
{\footnotesize\ttfamily static int set\+\_\+sched\+\_\+rr (\begin{DoxyParamCaption}\item[{unsigned int}]{prio }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ DLGLOBAL}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+NOTICE}, and \textbf{ LOGP}.



Referenced by \textbf{ DEFUN\+\_\+\+ATTR()}.

\mbox{\label{group__Tdef__VTY_ga08c014e35af57827e747adc3e63f5a0d}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!timer\_command\_string@{timer\_command\_string}}
\index{timer\_command\_string@{timer\_command\_string}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{timer\_command\_string()}
{\footnotesize\ttfamily static char $\ast$ timer\+\_\+command\+\_\+string (\begin{DoxyParamCaption}\item[{const char $\ast$}]{prefix,  }\item[{const char $\ast$}]{suffix }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+group\+\_\+args()}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, and \textbf{ tall\+\_\+vty\+\_\+cmd\+\_\+ctx}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}.

\mbox{\label{group__Tdef__VTY_ga79202530d21b04e7613ebf1cbfd93a44}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!timer\_doc\_string@{timer\_doc\_string}}
\index{timer\_doc\_string@{timer\_doc\_string}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{timer\_doc\_string()}
{\footnotesize\ttfamily static char $\ast$ timer\+\_\+doc\+\_\+string (\begin{DoxyParamCaption}\item[{const char $\ast$}]{prefix,  }\item[{const char $\ast$}]{suffix }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+group\+\_\+docs()}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, and \textbf{ tall\+\_\+vty\+\_\+cmd\+\_\+ctx}.



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}.



\doxysubsection{Variable Documentation}
\mbox{\label{group__Tdef__VTY_gaaab0d2861777764f0747bc95c3b6540a}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!argc@{argc}}
\index{argc@{argc}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{argc}
{\footnotesize\ttfamily argc}



Referenced by \textbf{ ALIAS()}, \textbf{ argv\+\_\+concat()}, \textbf{ cmd\+\_\+execute\+\_\+command\+\_\+real()}, \textbf{ cmd\+\_\+execute\+\_\+command\+\_\+strict()}, \textbf{ DEFUN()}, \textbf{ DEFUN\+\_\+\+ATTR()}, \textbf{ DEFUN\+\_\+\+HIDDEN()}, and \textbf{ g\+DEFUN()}.

\mbox{\label{group__Tdef__VTY_ga1fa302baef54f3e7f08e6831fcf3e191}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!argv@{argv}}
\index{argv@{argv}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{argv}
{\footnotesize\ttfamily argv}



Referenced by \textbf{ ALIAS()}, \textbf{ argv\+\_\+concat()}, \textbf{ cmd\+\_\+execute\+\_\+command\+\_\+real()}, \textbf{ cmd\+\_\+execute\+\_\+command\+\_\+strict()}, \textbf{ DEFUN()}, \textbf{ DEFUN\+\_\+\+ATTR()}, \textbf{ DEFUN\+\_\+\+HIDDEN()}, and \textbf{ g\+DEFUN()}.

\mbox{\label{group__Tdef__VTY_ga78f98a88ed687d0d129a52a66740b0bb}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!CMD\_SUCCESS@{CMD\_SUCCESS}}
\index{CMD\_SUCCESS@{CMD\_SUCCESS}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{CMD\_SUCCESS}
{\footnotesize\ttfamily return CMD\+\_\+\+SUCCESS}



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_ga47917df24fc1fec9b49b79b3ee038ea0}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!g@{g}}
\index{g@{g}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{g}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+tdef\+\_\+group} $\ast$ g = NULL}



Referenced by \textbf{ add\+\_\+group\+\_\+args()}, \textbf{ add\+\_\+group\+\_\+docs()}, \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write()}.

\mbox{\label{group__Tdef__VTY_ga42bf824ac1f4a064e46741bad1aceef0}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!global\_tdef\_groups@{global\_tdef\_groups}}
\index{global\_tdef\_groups@{global\_tdef\_groups}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{global\_tdef\_groups}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+tdef\+\_\+group}$\ast$ global\+\_\+tdef\+\_\+groups\hspace{0.3cm}{\ttfamily [static]}}



Singleton Tnnn groups definition as set by \doxyref{osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}{p.}{group__Tdef__VTY_ga7deb1e36c8f098f16f0a344b3039088c}. 



Referenced by \textbf{ add\+\_\+group\+\_\+args()}, \textbf{ add\+\_\+group\+\_\+docs()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+init()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+groups\+\_\+write()}.

\mbox{\label{group__Tdef__VTY_gafee381e8df53a488a63dbd184967d812}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!group\_arg@{group\_arg}}
\index{group\_arg@{group\_arg}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{group\_arg}
{\footnotesize\ttfamily group\+\_\+arg = \textbf{ argv}[0]}



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}.

\mbox{\label{group__Tdef__VTY_gad47890ac2571eda8005f0ff90ef09e8d}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!sched\_node@{sched\_node}}
\index{sched\_node@{sched\_node}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{sched\_node}
{\footnotesize\ttfamily struct \textbf{ cmd\+\_\+node} sched\+\_\+node\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        L\_CPU\_SCHED\_NODE,}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}\%s(config-\/cpu-\/sched)\# "{}},}
\DoxyCodeLine{        1,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+cpu\+\_\+sched\+\_\+vty\+\_\+init()}.

\mbox{\label{group__Tdef__VTY_ga98e08a5e7196da28aa5509b609852eec}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!sched\_vty\_opts@{sched\_vty\_opts}}
\index{sched\_vty\_opts@{sched\_vty\_opts}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{sched\_vty\_opts}
{\footnotesize\ttfamily struct \textbf{ sched\+\_\+vty\+\_\+opts}$\ast$ \textbf{ sched\+\_\+vty\+\_\+opts}\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{group__Tdef__VTY_ga7115e76a2ed09d117bbd97e0e465289e}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!T\_arg@{T\_arg}}
\index{T\_arg@{T\_arg}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{T\_arg}
{\footnotesize\ttfamily const char$\ast$ T\+\_\+arg = \textbf{ argc} $>$ 1 ? \textbf{ argv}[1] \+: NULL}



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+groups\+\_\+for\+\_\+each()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}.

\mbox{\label{group__Tdef__VTY_ga9dcb7b1e44e6a89b1daa92b4c5711519}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!tdefs@{tdefs}}
\index{tdefs@{tdefs}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{tdefs}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+tdef}$\ast$ tdefs = NULL}



Referenced by \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+out\+\_\+all\+\_\+va()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+parse\+\_\+\+T\+\_\+arg()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+set\+\_\+cmd()}, \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+show\+\_\+cmd()}, and \textbf{ osmo\+\_\+tdef\+\_\+vty\+\_\+write()}.

\mbox{\label{group__Tdef__VTY_ga9635926c517393c2fdb65d32e6048be3}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!timer\_args@{timer\_args}}
\index{timer\_args@{timer\_args}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{timer\_args}
{\footnotesize\ttfamily timer\+\_\+args}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\{}
\DoxyCodeLine{        \textcolor{keyword}{const} \textcolor{keywordtype}{char} *group\_arg}

\end{DoxyCode}
\mbox{\label{group__Tdef__VTY_ga1dbc34c0779f5308bed5c4f3c333d060}} 
\index{Tnnn timer VTY configuration@{Tnnn timer VTY configuration}!vty@{vty}}
\index{vty@{vty}!Tnnn timer VTY configuration@{Tnnn timer VTY configuration}}
\doxysubsubsection{vty}
{\footnotesize\ttfamily \textbf{ vty}}



Referenced by \textbf{ cmd\+\_\+execute\+\_\+command\+\_\+strict()}, \textbf{ DEFUN()}, \textbf{ if()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+vty()}, \textbf{ vty\+\_\+create()}, \textbf{ vty\+\_\+down\+\_\+level()}, \textbf{ vty\+\_\+event()}, \textbf{ vty\+\_\+out\+\_\+rate\+\_\+ctr\+\_\+group2()}, \textbf{ vty\+\_\+out\+\_\+rate\+\_\+ctr\+\_\+group\+\_\+fmt2()}, \textbf{ vty\+\_\+out\+\_\+stat\+\_\+item\+\_\+group2()}, \textbf{ vty\+\_\+out\+\_\+statistics\+\_\+partial2()}, \textbf{ vty\+\_\+read\+\_\+config\+\_\+filep()}, and \textbf{ vty\+\_\+reset()}.

