\hypertarget{classPathAttribute}{
\section{PathAttribute Class Reference}
\label{classPathAttribute}\index{PathAttribute@{PathAttribute}}
}
Inheritance diagram for PathAttribute:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=12.000000cm]{classPathAttribute}
\end{center}
\end{figure}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
enum {\bfseries Flags} \{ \par
{\bfseries Optional} =  0x80, 
{\bfseries Transitive} =  0x40, 
{\bfseries Partial} =  0x20, 
{\bfseries Extended} =  0x10, 
\par
{\bfseries ValidFlags} =  0xf0, 
{\bfseries NoFlags} =  0
 \}
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual \hyperlink{classPathAttribute}{PathAttribute} $\ast$ \hyperlink{classPathAttribute_a17f0c215d2873317797a899b7ac58ef6}{clone} () const =0
\begin{DoxyCompactList}\small\item\em Make a copy of \hyperlink{protocolthe-p}{the} current attribute. \item\end{DoxyCompactList}\item 
virtual bool \hyperlink{classPathAttribute_a5570039d9cd5e255bb187fd245861e09}{encode} (uint8\_\-t $\ast$buf, size\_\-t \&length, const \hyperlink{classBGPPeerData}{BGPPeerData} $\ast$peerdata) const =0
\begin{DoxyCompactList}\small\item\em encode a path attribute. \item\end{DoxyCompactList}\item 
size\_\-t \hyperlink{classPathAttribute_ab4a0b444bed5d171d536aa1ed791f4ca}{header\_\-size} () const 
\item 
PathAttType \hyperlink{classPathAttribute_aa0596496bc2a501fb02182b7efce4510}{type} () const 
\item 
Flags \hyperlink{classPathAttribute_aa750a593fb06d53fbc4d7df53acf556b}{flags} () const 
\item 
\hypertarget{classPathAttribute_ac0eff665333fba0b3344c40a97b82c4c}{
void \hyperlink{classPathAttribute_ac0eff665333fba0b3344c40a97b82c4c}{set\_\-partial} ()}
\label{classPathAttribute_ac0eff665333fba0b3344c40a97b82c4c}

\begin{DoxyCompactList}\small\item\em Set \hyperlink{protocolthe-p}{the} partial flag. \item\end{DoxyCompactList}\item 
bool \hyperlink{classPathAttribute_ab10cc091e03abaa7d0cbd05b767d9da1}{operator$<$} (const \hyperlink{classPathAttribute}{PathAttribute} \&him) const 
\begin{DoxyCompactList}\small\item\em comparison operators are used to sort attributes. \item\end{DoxyCompactList}\item 
\hypertarget{classPathAttribute_a7d3d840c728a67d295b01596f30dda01}{
bool {\bfseries operator==} (const \hyperlink{classPathAttribute}{PathAttribute} \&him) const }
\label{classPathAttribute_a7d3d840c728a67d295b01596f30dda01}

\item 
\hypertarget{classPathAttribute_a537dc08e0815d51ae36ac93a3dc5aed0}{
void \hyperlink{classPathAttribute_a537dc08e0815d51ae36ac93a3dc5aed0}{add\_\-hash} (MD5\_\-CTX $\ast$context) const }
\label{classPathAttribute_a537dc08e0815d51ae36ac93a3dc5aed0}

\begin{DoxyCompactList}\small\item\em compute \hyperlink{protocolthe-p}{the} hash for this object. \item\end{DoxyCompactList}\item 
virtual string \hyperlink{classPathAttribute_aae2900e4b96589e10291f96d3f584b6e}{str} () const 
\begin{DoxyCompactList}\small\item\em We need to encode an attribute to send to a peer. \item\end{DoxyCompactList}\item 
\hypertarget{classPathAttribute_a3e62b96cc602c6666957707f93626bae}{
void {\bfseries pretty\_\-print} ()}
\label{classPathAttribute_a3e62b96cc602c6666957707f93626bae}

\item 
\hypertarget{classPathAttribute_a1f18610f00634fde09679c9769be70b6}{
bool {\bfseries optional} () const }
\label{classPathAttribute_a1f18610f00634fde09679c9769be70b6}

\item 
\hypertarget{classPathAttribute_a2ccaf818759431c5cc2593a4cf399f46}{
bool {\bfseries transitive} () const }
\label{classPathAttribute_a2ccaf818759431c5cc2593a4cf399f46}

\item 
\hypertarget{classPathAttribute_ac89fe518504abe11f56f32c9ca9a6335}{
bool {\bfseries partial} () const }
\label{classPathAttribute_ac89fe518504abe11f56f32c9ca9a6335}

\item 
\hypertarget{classPathAttribute_a287bfdae7bb3d787f49307781d64a2ee}{
bool {\bfseries extended} () const }
\label{classPathAttribute_a287bfdae7bb3d787f49307781d64a2ee}

\item 
\hypertarget{classPathAttribute_a83962685fbc0249859b5d3cbbda0fc47}{
bool {\bfseries well\_\-known} () const }
\label{classPathAttribute_a83962685fbc0249859b5d3cbbda0fc47}

\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static \hyperlink{classPathAttribute}{PathAttribute} $\ast$ \hyperlink{classPathAttribute_a5f84a48e2499c8dee7cd31ada203cdb9}{create} (const uint8\_\-t $\ast$d, uint16\_\-t max\_\-len, size\_\-t \&actual\_\-length, const \hyperlink{classBGPPeerData}{BGPPeerData} $\ast$peerdata, uint32\_\-t ip\_\-version)  throw (CorruptMessage)
\begin{DoxyCompactList}\small\item\em main routine to create a \hyperlink{classPathAttribute}{PathAttribute} from incoming data. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
int \hyperlink{classPathAttribute_a740d2e832e563becd34fd678a2ea0097}{sorttype} () const 
\begin{DoxyCompactList}\small\item\em \hyperlink{classPathAttribute_a740d2e832e563becd34fd678a2ea0097}{sorttype()} is only used in sorting a path attribute list. \item\end{DoxyCompactList}\item 
\hypertarget{classPathAttribute_a2d5f07974f36818436c937523c1d42c6}{
\hyperlink{classPathAttribute_a2d5f07974f36818436c937523c1d42c6}{PathAttribute} (Flags f, PathAttType t)}
\label{classPathAttribute_a2d5f07974f36818436c937523c1d42c6}

\begin{DoxyCompactList}\small\item\em helper constructor used when creating an object from a derived class. \item\end{DoxyCompactList}\item 
\hypertarget{classPathAttribute_ad01936043fdd82dbb1c8b0d8c13c477a}{
\hyperlink{classPathAttribute_ad01936043fdd82dbb1c8b0d8c13c477a}{PathAttribute} (const uint8\_\-t $\ast$d)}
\label{classPathAttribute_ad01936043fdd82dbb1c8b0d8c13c477a}

\begin{DoxyCompactList}\small\item\em basic constructor from data, assumes that \hyperlink{protocolthe-p}{the} block has at least \hyperlink{protocolthe-p}{the} required size. \item\end{DoxyCompactList}\item 
uint8\_\-t $\ast$ \hyperlink{classPathAttribute_a02365b0e323e98a6ad3ec9b5389ff235}{set\_\-header} (uint8\_\-t $\ast$data, size\_\-t payload\_\-size, size\_\-t \&wire\_\-size) const 
\begin{DoxyCompactList}\small\item\em helper function to fill \hyperlink{protocolthe-p}{the} header. \item\end{DoxyCompactList}\item 
\hypertarget{classPathAttribute_a9b0af5696133e158b78bf6201daf8671}{
const uint8\_\-t $\ast$ {\bfseries payload} (const uint8\_\-t $\ast$d)}
\label{classPathAttribute_a9b0af5696133e158b78bf6201daf8671}

\end{DoxyCompactItemize}
\subsection*{Static Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
static size\_\-t \hyperlink{classPathAttribute_a602dea71230e69351676a2cc7e823ed4}{length} (const uint8\_\-t $\ast$d)
\begin{DoxyCompactList}\small\item\em fetch \hyperlink{protocolthe-p}{the} length from \hyperlink{protocolthe-p}{the} header. \item\end{DoxyCompactList}\item 
static size\_\-t \hyperlink{classPathAttribute_af1620aed45285196dde4ac10fb94ec58}{total\_\-tlv\_\-length} (const uint8\_\-t $\ast$d)
\begin{DoxyCompactList}\small\item\em Total length including \hyperlink{protocolthe-p}{the} header. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Protected Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classPathAttribute_a53f18b3ff7255088fafc44d6f3a357a4}{
uint8\_\-t {\bfseries \_\-flags}}
\label{classPathAttribute_a53f18b3ff7255088fafc44d6f3a357a4}

\item 
\hypertarget{classPathAttribute_ad7f765dcb15e40203efb37c77cedba63}{
uint8\_\-t {\bfseries \_\-type}}
\label{classPathAttribute_ad7f765dcb15e40203efb37c77cedba63}

\end{DoxyCompactItemize}


\subsection{Member Function Documentation}
\hypertarget{classPathAttribute_a17f0c215d2873317797a899b7ac58ef6}{
\index{PathAttribute@{PathAttribute}!clone@{clone}}
\index{clone@{clone}!PathAttribute@{PathAttribute}}
\subsubsection[{clone}]{\setlength{\rightskip}{0pt plus 5cm}virtual {\bf PathAttribute}$\ast$ PathAttribute::clone (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}pure virtual\mbox{]}}}}
\label{classPathAttribute_a17f0c215d2873317797a899b7ac58ef6}


Make a copy of \hyperlink{protocolthe-p}{the} current attribute. 

The derived class should use new to generate a copy of itself. The wire format representation will not be used by \hyperlink{protocolthe-p}{the} caller. 

Implemented in \hyperlink{classAnyAttribute_ac9302be32629830f171912d41012fb2d}{AnyAttribute}, \hyperlink{classOriginAttribute_a447ba11ff572f56d785e3e5fe77ae729}{OriginAttribute}, \hyperlink{classASPathAttribute_ab3c2fae06814c88059bc86882c3f1a62}{ASPathAttribute}, \hyperlink{classAS4PathAttribute_ab2a74dab628b24d42cf356522d3ec05b}{AS4PathAttribute}, \hyperlink{classNextHopAttribute_ad15f98415d3613f01c940405b1b7d5c5}{NextHopAttribute$<$ A $>$}, \hyperlink{classMEDAttribute_a52fd73cf7581249ed8b6fd1318079c04}{MEDAttribute}, \hyperlink{classLocalPrefAttribute_a77b3902cadd95173b6913a4b1be12182}{LocalPrefAttribute}, \hyperlink{classAtomicAggAttribute_aba62f7856cdcd3878dff6b3d7e3b5117}{AtomicAggAttribute}, \hyperlink{classAggregatorAttribute_a49f5cbf9e5ee0311f179081ad573fd39}{AggregatorAttribute}, \hyperlink{classAS4AggregatorAttribute_ad129bc46831b9ad5679b90b8029ac523}{AS4AggregatorAttribute}, \hyperlink{classCommunityAttribute_a2b8fc4fe8d7c7092170e69bdb49df471}{CommunityAttribute}, \hyperlink{classOriginatorIDAttribute_a35723aa1064a3a6b3db8326dace4b958}{OriginatorIDAttribute}, \hyperlink{classClusterListAttribute_a531d8f02419e93a91c218bd68d350fe9}{ClusterListAttribute}, \hyperlink{classMPReachNLRIAttribute_a5dd35c7cd812e9ba9a246cfaf98099bf}{MPReachNLRIAttribute$<$ A $>$}, \hyperlink{classMPUNReachNLRIAttribute_a6f8a694559f25534d5428350a87f8c1c}{MPUNReachNLRIAttribute$<$ A $>$}, and \hyperlink{classUnknownAttribute_ad0ad4dc275692409d55e45e5a11af7f0}{UnknownAttribute}.

\hypertarget{classPathAttribute_a5f84a48e2499c8dee7cd31ada203cdb9}{
\index{PathAttribute@{PathAttribute}!create@{create}}
\index{create@{create}!PathAttribute@{PathAttribute}}
\subsubsection[{create}]{\setlength{\rightskip}{0pt plus 5cm}{\bf PathAttribute} $\ast$ PathAttribute::create (
\begin{DoxyParamCaption}
\item[{const uint8\_\-t $\ast$}]{d, }
\item[{uint16\_\-t}]{max\_\-len, }
\item[{size\_\-t \&}]{actual\_\-length, }
\item[{const {\bf BGPPeerData} $\ast$}]{peerdata, }
\item[{uint32\_\-t}]{ip\_\-version}
\end{DoxyParamCaption}
)  throw ({\bf CorruptMessage})\hspace{0.3cm}{\ttfamily  \mbox{[}static\mbox{]}}}}
\label{classPathAttribute_a5f84a48e2499c8dee7cd31ada203cdb9}


main routine to create a \hyperlink{classPathAttribute}{PathAttribute} from incoming data. 

Takes a chunk of memory of size l, returns an object of \hyperlink{protocolthe-p}{the} appropriate type and actual\_\-length is \hyperlink{protocolthe-p}{the} number of bytes used from \hyperlink{protocolthe-p}{the} packet. Throws an exception on error. \hypertarget{classPathAttribute_a5570039d9cd5e255bb187fd245861e09}{
\index{PathAttribute@{PathAttribute}!encode@{encode}}
\index{encode@{encode}!PathAttribute@{PathAttribute}}
\subsubsection[{encode}]{\setlength{\rightskip}{0pt plus 5cm}bool PathAttribute::encode (
\begin{DoxyParamCaption}
\item[{uint8\_\-t $\ast$}]{buf, }
\item[{size\_\-t \&}]{wire\_\-size, }
\item[{const {\bf BGPPeerData} $\ast$}]{peerdata}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}pure virtual\mbox{]}}}}
\label{classPathAttribute_a5570039d9cd5e255bb187fd245861e09}


encode a path attribute. 

In a sane world, we'd use a virtual function for this. But we store so many path attributes that we can't afford \hyperlink{protocolthe-p}{the} overhead of a virtual function table for them, so we have to do this \hyperlink{protocolthe-p}{the} hard way

XXX THE ABOVE IS NO LONGER THE CASE. WE SHOULD REWRITE THIS TO USE VIRTUAL FUNCTIONS 

Implemented in \hyperlink{classAnyAttribute_af576e29e9a557e3069ec843953cd3684}{AnyAttribute}, \hyperlink{classOriginAttribute_a1f2194ee4da0622a4bec31cbd3f6673b}{OriginAttribute}, \hyperlink{classASPathAttribute_aec50147f6f524a160859c784d3d5f8d1}{ASPathAttribute}, \hyperlink{classAS4PathAttribute_a232d40fec1ebdce36a87c9dbf01695ad}{AS4PathAttribute}, \hyperlink{classNextHopAttribute_a108d84d90c4194b9ad09ffe21d9c6341}{NextHopAttribute$<$ A $>$}, \hyperlink{classMEDAttribute_a7e486966334d9187c25eac5e2afcd776}{MEDAttribute}, \hyperlink{classLocalPrefAttribute_ab6b55e9c3e888b8eaa34e9f1c6f48e31}{LocalPrefAttribute}, \hyperlink{classAtomicAggAttribute_ab8003ca3566a895975722780b9d196c2}{AtomicAggAttribute}, \hyperlink{classAggregatorAttribute_adf6eb3dc7f7e550434ba564dc9714436}{AggregatorAttribute}, \hyperlink{classAS4AggregatorAttribute_a59fbaba17c3723dc7448a8e15a6c4ef6}{AS4AggregatorAttribute}, \hyperlink{classCommunityAttribute_addd4f1a3745742ffe91ffe31dfe6d9a9}{CommunityAttribute}, \hyperlink{classOriginatorIDAttribute_a7981a66809e32f81bb56f386133dbd46}{OriginatorIDAttribute}, \hyperlink{classClusterListAttribute_a49456285a512e33812962260f86161ed}{ClusterListAttribute}, \hyperlink{classMPReachNLRIAttribute_a62ea5585aa5c6396a3d64d385afa5327}{MPReachNLRIAttribute$<$ A $>$}, \hyperlink{classMPUNReachNLRIAttribute_afebddd55968e8b160c4b12ee1776d1bf}{MPUNReachNLRIAttribute$<$ A $>$}, \hyperlink{classUnknownAttribute_afdaf2cf6a5d1d2421cf181a5e6f097eb}{UnknownAttribute}, \hyperlink{classMPReachNLRIAttribute_ad27993a2093f4b8e782e36559c08936c}{MPReachNLRIAttribute$<$ A $>$}, \hyperlink{classMPReachNLRIAttribute_a1ae23a5269fedf2a4f9b00eabc6a945f}{MPReachNLRIAttribute$<$ A $>$}, \hyperlink{classMPUNReachNLRIAttribute_a504d2a2e9fc4b2244880d3ad28682bb5}{MPUNReachNLRIAttribute$<$ A $>$}, and \hyperlink{classMPUNReachNLRIAttribute_aaf9292ab2d6e71894bc51acc6ee11f63}{MPUNReachNLRIAttribute$<$ A $>$}.

\hypertarget{classPathAttribute_aa750a593fb06d53fbc4d7df53acf556b}{
\index{PathAttribute@{PathAttribute}!flags@{flags}}
\index{flags@{flags}!PathAttribute@{PathAttribute}}
\subsubsection[{flags}]{\setlength{\rightskip}{0pt plus 5cm}Flags PathAttribute::flags (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classPathAttribute_aa750a593fb06d53fbc4d7df53acf556b}
\begin{DoxyReturn}{Returns}
\hyperlink{protocolthe-p}{the} flags for \hyperlink{protocolthe-p}{the} attribute 
\end{DoxyReturn}
\hypertarget{classPathAttribute_ab4a0b444bed5d171d536aa1ed791f4ca}{
\index{PathAttribute@{PathAttribute}!header\_\-size@{header\_\-size}}
\index{header\_\-size@{header\_\-size}!PathAttribute@{PathAttribute}}
\subsubsection[{header\_\-size}]{\setlength{\rightskip}{0pt plus 5cm}size\_\-t PathAttribute::header\_\-size (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classPathAttribute_ab4a0b444bed5d171d536aa1ed791f4ca}
\begin{DoxyReturn}{Returns}
\hyperlink{protocolthe-p}{the} size of \hyperlink{protocolthe-p}{the} header. 
\end{DoxyReturn}
\hypertarget{classPathAttribute_a602dea71230e69351676a2cc7e823ed4}{
\index{PathAttribute@{PathAttribute}!length@{length}}
\index{length@{length}!PathAttribute@{PathAttribute}}
\subsubsection[{length}]{\setlength{\rightskip}{0pt plus 5cm}static size\_\-t PathAttribute::length (
\begin{DoxyParamCaption}
\item[{const uint8\_\-t $\ast$}]{d}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline, static, protected\mbox{]}}}}
\label{classPathAttribute_a602dea71230e69351676a2cc7e823ed4}


fetch \hyperlink{protocolthe-p}{the} length from \hyperlink{protocolthe-p}{the} header. 

Assume \hyperlink{protocolthe-p}{the} header is there. \hypertarget{classPathAttribute_ab10cc091e03abaa7d0cbd05b767d9da1}{
\index{PathAttribute@{PathAttribute}!operator$<$@{operator$<$}}
\index{operator$<$@{operator$<$}!PathAttribute@{PathAttribute}}
\subsubsection[{operator$<$}]{\setlength{\rightskip}{0pt plus 5cm}bool PathAttribute::operator$<$ (
\begin{DoxyParamCaption}
\item[{const {\bf PathAttribute} \&}]{him}
\end{DoxyParamCaption}
) const}}
\label{classPathAttribute_ab10cc091e03abaa7d0cbd05b767d9da1}


comparison operators are used to sort attributes. 

Right now \hyperlink{protocolthe-p}{the} sort order is based on \hyperlink{protocolthe-p}{the} type, size() and payload representation. \hypertarget{classPathAttribute_a02365b0e323e98a6ad3ec9b5389ff235}{
\index{PathAttribute@{PathAttribute}!set\_\-header@{set\_\-header}}
\index{set\_\-header@{set\_\-header}!PathAttribute@{PathAttribute}}
\subsubsection[{set\_\-header}]{\setlength{\rightskip}{0pt plus 5cm}uint8\_\-t $\ast$ PathAttribute::set\_\-header (
\begin{DoxyParamCaption}
\item[{uint8\_\-t $\ast$}]{data, }
\item[{size\_\-t}]{payload\_\-size, }
\item[{size\_\-t \&}]{wire\_\-size}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}protected\mbox{]}}}}
\label{classPathAttribute_a02365b0e323e98a6ad3ec9b5389ff235}


helper function to fill \hyperlink{protocolthe-p}{the} header. 

Needs \_\-flags and \_\-type properly initialized. Writes into data buffer, and returns pointer to first byte of buffer after \hyperlink{protocolthe-p}{the} header. \hypertarget{classPathAttribute_a740d2e832e563becd34fd678a2ea0097}{
\index{PathAttribute@{PathAttribute}!sorttype@{sorttype}}
\index{sorttype@{sorttype}!PathAttribute@{PathAttribute}}
\subsubsection[{sorttype}]{\setlength{\rightskip}{0pt plus 5cm}int PathAttribute::sorttype (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline, protected\mbox{]}}}}
\label{classPathAttribute_a740d2e832e563becd34fd678a2ea0097}


\hyperlink{classPathAttribute_a740d2e832e563becd34fd678a2ea0097}{sorttype()} is only used in sorting a path attribute list. 

It is different from PathAttType because we want to sort \hyperlink{protocolthe-p}{the} path attribute list on \hyperlink{classNextHop}{NextHop} for less expensive processing when \hyperlink{protocolthe-p}{the} IGP information for a nexthop changes. So we give priority to NEXT\_\-HOP and keep other values unchanged. \hypertarget{classPathAttribute_aae2900e4b96589e10291f96d3f584b6e}{
\index{PathAttribute@{PathAttribute}!str@{str}}
\index{str@{str}!PathAttribute@{PathAttribute}}
\subsubsection[{str}]{\setlength{\rightskip}{0pt plus 5cm}string PathAttribute::str (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}
\label{classPathAttribute_aae2900e4b96589e10291f96d3f584b6e}


We need to encode an attribute to send to a peer. 

However we only have \hyperlink{protocolthe-p}{the} canonically encoded byte stream data for it. Sometimes that is fine, and we should just send that; sometimes we need to decode and re-\/encode for this specific peer. 

Reimplemented in \hyperlink{classOriginAttribute_ae7bf70f883a98178d565d7e3a60cfd75}{OriginAttribute}, \hyperlink{classASPathAttribute_a3567d9038d3bee553b2ac1e7a5845a1e}{ASPathAttribute}, \hyperlink{classAS4PathAttribute_aa91426d659c864f5fb7b312394bca8e4}{AS4PathAttribute}, \hyperlink{classNextHopAttribute_a6667c634f52e4fbebcdea30c473fd827}{NextHopAttribute$<$ A $>$}, \hyperlink{classMEDAttribute_a3f26c68d7df98b666803ce29e5f4fb96}{MEDAttribute}, \hyperlink{classLocalPrefAttribute_aea9aa793c10eb3ceb1ecc6d6145879fe}{LocalPrefAttribute}, \hyperlink{classAtomicAggAttribute_a974133cef07f1a59f5b7fa487764e9c6}{AtomicAggAttribute}, \hyperlink{classAggregatorAttribute_af10c311da72001f3928f5b095df42420}{AggregatorAttribute}, \hyperlink{classAS4AggregatorAttribute_a488d5f0df7c6bfc187a13f75903d45d6}{AS4AggregatorAttribute}, \hyperlink{classCommunityAttribute_a2e50e5974c1500b528cdb44068035ed6}{CommunityAttribute}, \hyperlink{classOriginatorIDAttribute_adaf38e7438a4fa4f926e642de4d695f1}{OriginatorIDAttribute}, \hyperlink{classClusterListAttribute_aec01840787de1e5b384c283be42405c4}{ClusterListAttribute}, \hyperlink{classMPReachNLRIAttribute_a39ab7416fff06a01ef07192a74466b24}{MPReachNLRIAttribute$<$ A $>$}, \hyperlink{classMPUNReachNLRIAttribute_ad5db0cfb79fcde8aa5db3ae3ba323072}{MPUNReachNLRIAttribute$<$ A $>$}, and \hyperlink{classUnknownAttribute_ae2eec0ec673a5a4f41c8d6a6ab1a5c14}{UnknownAttribute}.

\hypertarget{classPathAttribute_af1620aed45285196dde4ac10fb94ec58}{
\index{PathAttribute@{PathAttribute}!total\_\-tlv\_\-length@{total\_\-tlv\_\-length}}
\index{total\_\-tlv\_\-length@{total\_\-tlv\_\-length}!PathAttribute@{PathAttribute}}
\subsubsection[{total\_\-tlv\_\-length}]{\setlength{\rightskip}{0pt plus 5cm}static size\_\-t PathAttribute::total\_\-tlv\_\-length (
\begin{DoxyParamCaption}
\item[{const uint8\_\-t $\ast$}]{d}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline, static, protected\mbox{]}}}}
\label{classPathAttribute_af1620aed45285196dde4ac10fb94ec58}


Total length including \hyperlink{protocolthe-p}{the} header. 

Used to send \hyperlink{protocolthe-p}{the} whole TLV back when an error has been detected. \hypertarget{classPathAttribute_aa0596496bc2a501fb02182b7efce4510}{
\index{PathAttribute@{PathAttribute}!type@{type}}
\index{type@{type}!PathAttribute@{PathAttribute}}
\subsubsection[{type}]{\setlength{\rightskip}{0pt plus 5cm}PathAttType PathAttribute::type (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classPathAttribute_aa0596496bc2a501fb02182b7efce4510}
\begin{DoxyReturn}{Returns}
\hyperlink{protocolthe-p}{the} type of \hyperlink{protocolthe-p}{the} attribute 
\end{DoxyReturn}


The documentation for this class was generated from the following files:\begin{DoxyCompactItemize}
\item 
/home/greearb/git/xorp.ct.github/xorp/bgp/path\_\-attribute.hh\item 
/home/greearb/git/xorp.ct.github/xorp/bgp/path\_\-attribute.cc\end{DoxyCompactItemize}
