Add model field to VIF class
PATCH 1/1 Add model field to VIF class
Currently there is no way to specify the model of VIF for HVM guests via Xen API. This patch introduces a 'model' field to the VIF class.
Regards,
Jim
# HG changeset patch
# User Jim Fehlig <[email protected]>
# Date 1175015367 21600
# Node ID 930d5ed35a66a4ed8a3fc27236309a680cb3577d
# Parent 10fcea8f51cd28bd7970efb561da9fba879b151f
Add 'model' field to VIF class, enabling specification of emulated vif model via Xen API.
Signed-off-by Jim Fehlig <[email protected]>
docs/xen-api/xenapi-datamodel.tex +67 -0
@@ -6979,6 +6979,7 @@ Quals & Field & Type & Description \\ $\mathit{RO}_\mathit{ins}$ & {\tt network} & network ref & virtual network to which this vif is connected \\ $\mathit{RO}_\mathit{ins}$ & {\tt VM} & VM ref & virtual machine to which this vif is connected \\ $\mathit{RW}$ & {\tt MAC} & string & ethernet MAC address of virtual interface, as exposed to guest \\ +$\mathit{RW}$ & {\tt model} & string & emulated model of vif exposed to guest e.g. pcnet \\ $\mathit{RW}$ & {\tt MTU} & int & MTU in octets \\ $\mathit{RO}_\mathit{run}$ & {\tt currently\_attached} & bool & is the device currently attached (erased on reboot) \\ $\mathit{RO}_\mathit{run}$ & {\tt status\_code} & int & error/success code associated with last attach-operation (erased on reboot) \\
@@ -7277,6 +7278,72 @@ Set the MAC field of the given VIF. \noindent {\bf Signature:} \begin{verbatim} void set_MAC (session_id s, VIF ref self, string value)\end{verbatim} + + +\noindent{\bf Arguments:} + + +\vspace{0.3cm} +\begin{tabular}{|c|c|p{7cm}|} + \hline +{\bf type} & {\bf name} & {\bf description} \\ \hline +{\tt VIF ref } & self & reference to the object \\ \hline + +{\tt string } & value & New value to set \\ \hline + +\end{tabular} + +\vspace{0.3cm} + + \noindent {\bf Return Type:} +{\tt +void +} + + + +\vspace{0.3cm} +\vspace{0.3cm} +\vspace{0.3cm} +\subsubsection{RPC name:~get\_model} + +{\bf Overview:} +Get the model field of the given VIF. + + \noindent {\bf Signature:} +\begin{verbatim} string get_model (session_id s, VIF ref self)\end{verbatim} + + +\noindent{\bf Arguments:} + + +\vspace{0.3cm} +\begin{tabular}{|c|c|p{7cm}|} + \hline +{\bf type} & {\bf name} & {\bf description} \\ \hline +{\tt VIF ref } & self & reference to the object \\ \hline + +\end{tabular} + +\vspace{0.3cm} + + \noindent {\bf Return Type:} +{\tt +string +} + + +value of the field +\vspace{0.3cm} +\vspace{0.3cm} +\vspace{0.3cm} +\subsubsection{RPC name:~set\_model} + +{\bf Overview:} +Set the model field of the given VIF. + + \noindent {\bf Signature:} +\begin{verbatim} void set_model (session_id s, VIF ref self, string value)\end{verbatim} \noindent{\bf Arguments:}
tools/libxen/include/xen_vif.h +15 -0
@@ -71,6 +71,7 @@ typedef struct xen_vif_recordstruct xen_network_record_opt *network;struct xen_vm_record_opt *vm;char *mac; +char *model;int64_t mtu;bool currently_attached;int64_t status_code;
@@ -224,6 +225,13 @@ xen_vif_get_mac(xen_session *session, ch/** +* Get the model field of the given VIF. +*/ +extern bool +xen_vif_get_model (xen_session *session,char **result,xen_vif vif); + + +/** * Get the MTU field of the given VIF. */ extern bool
@@ -291,6 +299,13 @@ xen_vif_set_device(xen_session *session,*/ extern bool xen_vif_set_mac (xen_session *session,xen_vif vif,char *mac); + + +/** +* Set the model field of the given VIF. +*/ +extern bool +xen_vif_set_model (xen_session *session,xen_vif vif,char *model);/**
tools/libxen/src/xen_vif.c +36 -0
@@ -55,6 +55,9 @@ static const struct_member xen_vif_recor { .key = "MAC", .type = &abstract_type_string, .offset = offsetof(xen_vif_record, mac) }, + { .key = "model", + .type = &abstract_type_string, + .offset = offsetof(xen_vif_record, model) }, { .key = "MTU", .type = &abstract_type_int, .offset = offsetof(xen_vif_record, mtu) },
@@ -253,6 +256,23 @@ xen_vif_get_mac(xen_session *session, chbool +xen_vif_get_model (xen_session *session,char **result,xen_vif vif) +{ +abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vif } + }; + +abstract_type result_type = abstract_type_string; + + *result =NULL ; +XEN_CALL_ ("VIF.get_model" ); +return session->ok; +} + + +bool xen_vif_get_mtu (xen_session *session,int64_t *result,xen_vif vif) { abstract_value param_values[] =
@@ -413,6 +433,22 @@ xen_vif_set_mac(xen_session *session, xe };xen_call_ (session,"VIF.set_MAC" , param_values,2 ,NULL ,NULL ); +return session->ok; +} + + +bool +xen_vif_set_model (xen_session *session,xen_vif vif,char *model) +{ +abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = vif }, + { .type = &abstract_type_string, + .u.string_val = model } + }; + +xen_call_ (session,"VIF.set_model" , param_values,2 ,NULL ,NULL );return session->ok; }
tools/python/xen/xend/XendAPI.py +4 -0
@@ -1899,6 +1899,7 @@ class XendAPI(object): 'network', 'VM', 'MAC', + 'model', 'MTU'] VIF_attr_inst = VIF_attr_rw
@@ -1969,6 +1970,9 @@ class XendAPI(object): def VIF_get_MAC(self, session, vif_ref): return self._VIF_get(vif_ref, 'MAC') + + def VIF_get_model(self, session, vif_ref): + return self._VIF_get(vif_ref, 'model') def VIF_get_device(self, session, vif_ref): return self._VIF_get(vif_ref, 'device')
tools/python/xen/xend/XendConfig.py +2 -0
@@ -1043,6 +1043,8 @@ class XendConfig(dict): dev_info['type'] = cfg_xenapi.get('type') if cfg_xenapi.get('name'): dev_info['name'] = cfg_xenapi.get('name') + if cfg_xenapi.get('model'): + dev_info['model'] = cfg_xenapi.get('model') dev_uuid = cfg_xenapi.get('uuid', None) if not dev_uuid:
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel