diff options
author | Dan Williams <dcbw@redhat.com> | 2013-10-09 10:35:44 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-01-15 18:46:51 -0600 |
commit | 466311a51489254cb53be0eeac6adb81159f74de (patch) | |
tree | bf472400cc2d4af908dfc563b3704f750fcbce72 | |
parent | 162718f7a4281fe0522b1e63c78a77ecc679f96b (diff) | |
download | network-manager-applet-dcbw/dcb2.tar.gz |
editor: add page for DCB optionsdcbw/dcb2
-rw-r--r-- | src/connection-editor/Makefile.am | 5 | ||||
-rw-r--r-- | src/connection-editor/ce-page-dcb.ui | 3120 | ||||
-rw-r--r-- | src/connection-editor/nm-connection-editor.c | 3 | ||||
-rw-r--r-- | src/connection-editor/page-dcb.c | 698 | ||||
-rw-r--r-- | src/connection-editor/page-dcb.h | 59 |
5 files changed, 3884 insertions, 1 deletions
diff --git a/src/connection-editor/Makefile.am b/src/connection-editor/Makefile.am index 09d1719c..bdee98c6 100644 --- a/src/connection-editor/Makefile.am +++ b/src/connection-editor/Makefile.am @@ -65,6 +65,8 @@ nm_connection_editor_SOURCES = \ page-bridge-port.c \ page-vlan.h \ page-vlan.c \ + page-dcb.c \ + page-dcb.h \ vpn-helpers.h \ vpn-helpers.c \ ip4-routes-dialog.h \ @@ -113,7 +115,8 @@ ui_DATA = \ ce-page-mobile.ui \ ce-page-ppp.ui \ ce-ppp-auth-methods.ui \ - ce-page-vlan.ui + ce-page-vlan.ui \ + ce-page-dcb.ui BUILT_SOURCES = nm-connection-editor-service-glue.h diff --git a/src/connection-editor/ce-page-dcb.ui b/src/connection-editor/ce-page-dcb.ui new file mode 100644 index 00000000..b846cc4e --- /dev/null +++ b/src/connection-editor/ce-page-dcb.ui @@ -0,0 +1,3120 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.16.0 on Wed Jan 15 18:41:28 2014 --> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkTable" id="DcbPage"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkCheckButton" id="dcb_enabled_checkbutton"> + <property name="label" translatable="yes">Use Data Center Bridging (DCB) for this connection</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="right_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="left_padding">6</property> + <child> + <object class="GtkBox" id="dcb_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child> + <object class="GtkGrid" id="grid2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="row_spacing">6</property> + <property name="column_spacing">6</property> + <child> + <object class="GtkLabel" id="label62"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">FCoE</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label63"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">iSCSI</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label64"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">FIP</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label65"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Flow Control</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label66"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes"><b>Feature</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label67"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="label" translatable="yes"><b>Enable</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label68"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="label" translatable="yes"><b>Advertise</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label69"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="label" translatable="yes"><b>Willing</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label70"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="label" translatable="yes"><b>Priority</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fcoe_advertise_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fcoe_willing_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="iscsi_enable_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="iscsi_advertise_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="iscsi_willing_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fip_enable_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fip_advertise_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fip_willing_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_enable_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_advertise_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_willing_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="fcoe_enable_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="pfc_options_button"> + <property name="label" translatable="yes">Options...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">center</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label71"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="label" translatable="yes">Priority Groups</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_enable_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_advertise_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_willing_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="halign">center</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="pg_options_button"> + <property name="label" translatable="yes">Options...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">center</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="fcoe_priority_combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">default</item> + <item id="1" translatable="yes">0</item> + <item id="2" translatable="yes">1</item> + <item id="3" translatable="yes">2</item> + <item id="4" translatable="yes">3</item> + <item id="5" translatable="yes">4</item> + <item id="6" translatable="yes">5</item> + <item id="7" translatable="yes">6</item> + <item id="8" translatable="yes">7</item> + </items> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="iscsi_priority_combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">default</item> + <item id="1" translatable="yes">0</item> + <item id="2" translatable="yes">1</item> + <item id="3" translatable="yes">2</item> + <item id="4" translatable="yes">3</item> + <item id="5" translatable="yes">4</item> + <item id="6" translatable="yes">5</item> + <item id="7" translatable="yes">6</item> + <item id="8" translatable="yes">7</item> + </items> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="fip_priority_combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes">default</item> + <item id="1" translatable="yes">0</item> + <item id="2" translatable="yes">1</item> + <item id="3" translatable="yes">2</item> + <item id="4" translatable="yes">3</item> + <item id="5" translatable="yes">4</item> + <item id="6" translatable="yes">5</item> + <item id="7" translatable="yes">6</item> + <item id="8" translatable="yes">7</item> + </items> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="fcoe_options_button"> + <property name="label" translatable="yes">Options...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="halign">center</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"/> + </packing> + </child> + </object> + <object class="GtkListStore" id="fcoe_mode_liststore"> + <columns> + <!-- column-name Mode --> + <column type="gchararray"/> + <!-- column-name SettingValue --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Fabric</col> + <col id="1">fabric</col> + </row> + <row> + <col id="0" translatable="yes">VN2VN</col> + <col id="1">vn2vn</col> + </row> + </data> + </object> + <object class="GtkDialog" id="fcoe_dialog"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Fibre Channel over Ethernet</property> + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <property name="skip_pager_hint">True</property> + <property name="deletable">False</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox5"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="orientation">vertical</property> + <property name="spacing">7</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area5"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="fcoe_cancel_button"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="fcoe_ok_button"> + <property name="label">gtk-ok</property> + <property name="related_action"/> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="box5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkBox" id="box6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label21"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Mode:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="fcoe_mode_combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">fcoe_mode_liststore</property> + <property name="id_column">1</property> + <property name="active_id">0</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">6</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">fcoe_cancel_button</action-widget> + <action-widget response="-5">fcoe_ok_button</action-widget> + </action-widgets> + </object> + <object class="GtkDialog" id="pfc_dialog"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Priority Flow Control</property> + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <property name="skip_pager_hint">True</property> + <property name="deletable">False</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox1"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area1"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="pfc_cancel_button"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="pfc_ok_button"> + <property name="label">gtk-ok</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkBox" id="box2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Priority:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio0_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio2_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio1_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio2_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio3_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio3_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio4_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio4_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio5_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio5_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio6_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio6_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio7_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pfc_prio7_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">8</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enable or disable priority pause transmission for each User Priority.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">6</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">pfc_cancel_button</action-widget> + <action-widget response="-5">pfc_ok_button</action-widget> + </action-widgets> + </object> + <object class="GtkDialog" id="pg_dialog"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Priority Flow Control</property> + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <property name="skip_pager_hint">True</property> + <property name="deletable">False</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox3"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area3"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="pg_cancel_button"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="pg_ok_button"> + <property name="label">gtk-ok</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="box3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">6</property> + <child> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Group ID:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid0_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio2_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid1_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label14"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid2_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio3_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid3_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio4_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid4_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio5_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid5_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio6_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid6_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio7_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgid7_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">8</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label35"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Group Bandwidth:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label36"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct0_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label37"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct1_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label38"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct2_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label39"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct3_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label40"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct4_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label41"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct5_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label42"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct6_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label43"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_pgpct7_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">8</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label26"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Priority Bandwidth:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label27"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct0_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box11"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label28"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct1_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box12"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label29"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct2_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box13"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label30"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct3_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box14"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label31"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct4_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box15"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label32"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct5_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box16"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label33"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct6_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box17"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label34"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_uppct7_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">8</property> + <property name="top_attach">4</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label25"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enter the traffic class for each user priority.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">9</property> + <property name="width">9</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label44"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Strict Bandwidth:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label45"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict0_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label46"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict1_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label47"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict2_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label48"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict3_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label49"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict4_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label50"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict5_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label51"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict6_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio0_box9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label52"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pg_strict7_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">8</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box18"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label53"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">0:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc0_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label54"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Traffic Class:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box19"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label55"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">1:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc1_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box20"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label56"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">2:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc2_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box21"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label57"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">3:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc3_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box22"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label58"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">4:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc4_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">5</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box23"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label59"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">5:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc5_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">6</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box24"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label60"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">6:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc6_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">7</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="prio1_box25"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label61"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">7:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="pg_up2tc7_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">1</property> + <property name="width_chars">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">8</property> + <property name="top_attach">8</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">6</property> + <child> + <object class="GtkLabel" id="label20"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enter the priority group ID for each User Priority.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + <property name="width">9</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">6</property> + <child> + <object class="GtkLabel" id="label22"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enter the allowed link bandwidth percent each Priority Group may use.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + <property name="width">9</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">6</property> + <child> + <object class="GtkLabel" id="label23"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enter the percentage of priority group bandwidth each user priority may use.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + <property name="width">9</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">6</property> + <child> + <object class="GtkLabel" id="label24"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Enable or disable strict bandwidth for each user priority.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">7</property> + <property name="width">9</property> + <property name="height">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">6</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">6</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">pg_cancel_button</action-widget> + <action-widget response="-5">pg_ok_button</action-widget> + </action-widgets> + </object> + <object class="GtkAdjustment" id="prio_adjustment"> + <property name="lower">-1</property> + <property name="upper">7</property> + <property name="value">-1</property> + <property name="step_increment">1</property> + <property name="page_increment">1</property> + </object> +</interface> diff --git a/src/connection-editor/nm-connection-editor.c b/src/connection-editor/nm-connection-editor.c index 152cdee0..98bccee6 100644 --- a/src/connection-editor/nm-connection-editor.c +++ b/src/connection-editor/nm-connection-editor.c @@ -77,6 +77,7 @@ #include "page-bridge.h" #include "page-bridge-port.h" #include "page-vlan.h" +#include "page-dcb.h" #include "ce-polkit-button.h" #include "vpn-helpers.h" #include "eap-method.h" @@ -757,6 +758,8 @@ nm_connection_editor_set_connection (NMConnectionEditor *editor, goto out; if (!add_page (editor, ce_page_8021x_security_new, editor->connection, error)) goto out; + if (!add_page (editor, ce_page_dcb_new, editor->connection, error)) + goto out; } else if (!strcmp (connection_type, NM_SETTING_WIRELESS_SETTING_NAME)) { if (!add_page (editor, ce_page_wifi_new, editor->connection, error)) goto out; diff --git a/src/connection-editor/page-dcb.c b/src/connection-editor/page-dcb.c new file mode 100644 index 00000000..e8e35078 --- /dev/null +++ b/src/connection-editor/page-dcb.c @@ -0,0 +1,698 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager Connection editor -- Connection editor for NetworkManager + * + * Dan Williams <dcbw@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * (C) Copyright 2013 Red Hat, Inc. + */ + +#include "config.h" + +#include <string.h> +#include <errno.h> +#include <stdlib.h> + +#include <gtk/gtk.h> +#include <glib/gi18n.h> + +#include <NetworkManager.h> +#include <nm-setting-connection.h> +#include <nm-setting-dcb.h> +#include <nm-utils.h> + +#include "page-dcb.h" + +G_DEFINE_TYPE (CEPageDcb, ce_page_dcb, CE_TYPE_PAGE) + +#define CE_PAGE_DCB_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CE_TYPE_PAGE_DCB, CEPageDcbPrivate)) + +typedef struct { + /* Copy of initial setting, if any; changes in the Options dialogs + * update this setting, which is then copied to the final setting when + * required. + */ + NMSettingDcb *options; + + GtkToggleButton *enabled; + GtkBox *box; + + gboolean initial_have_dcb; +} CEPageDcbPrivate; + +/***************************************************************************/ + +static void +fcoe_dialog_show (CEPageDcb *self) +{ + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + CEPage *parent = CE_PAGE (self); + GtkWidget *dialog, *toplevel, *combo; + gint result; + + dialog = GTK_WIDGET (gtk_builder_get_object (parent->builder, "fcoe_dialog")); + g_assert (dialog); + toplevel = gtk_widget_get_toplevel (parent->page); + if (gtk_widget_is_toplevel (toplevel)) + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel)); + + /* Set the initial value */ + combo = GTK_WIDGET (gtk_builder_get_object (parent->builder, "fcoe_mode_combo")); + g_assert (combo); + gtk_combo_box_set_active_id (GTK_COMBO_BOX (combo), nm_setting_dcb_get_app_fcoe_mode (priv->options)); + + /* Run the dialog */ + result = gtk_dialog_run (GTK_DIALOG (dialog)); + if (result == GTK_RESPONSE_OK) { + g_object_set (G_OBJECT (priv->options), + NM_SETTING_DCB_APP_FCOE_MODE, gtk_combo_box_get_active_id (GTK_COMBO_BOX (combo)), + NULL); + } + + gtk_widget_hide (dialog); + ce_page_changed (CE_PAGE (self)); +} + +static void +pfc_dialog_show (CEPageDcb *self) +{ + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + CEPage *parent = CE_PAGE (self); + GtkWidget *dialog, *toplevel; + GtkToggleButton *check; + gint result; + guint i; + gboolean active; + char *tmp; + + dialog = GTK_WIDGET (gtk_builder_get_object (parent->builder, "pfc_dialog")); + g_assert (dialog); + toplevel = gtk_widget_get_toplevel (parent->page); + if (gtk_widget_is_toplevel (toplevel)) + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel)); + + /* Set the initial value */ + for (i = 0; i < 8; i++ ) { + tmp = g_strdup_printf ("pfc_prio%u_checkbutton", i); + check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (parent->builder, tmp)); + g_free (tmp); + g_assert (check); + + gtk_toggle_button_set_active (check, nm_setting_dcb_get_priority_flow_control (priv->options, i)); + } + + /* Run the dialog */ + result = gtk_dialog_run (GTK_DIALOG (dialog)); + if (result == GTK_RESPONSE_OK) { + for (i = 0; i < 8; i++ ) { + tmp = g_strdup_printf ("pfc_prio%u_checkbutton", i); + check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (parent->builder, tmp)); + g_free (tmp); + g_assert (check); + + active = gtk_toggle_button_get_active (check); + nm_setting_dcb_set_priority_flow_control (priv->options, i, active); + } + } + + gtk_widget_hide (dialog); + ce_page_changed (CE_PAGE (self)); +} + +static gboolean +uint_entries_validate (GtkBuilder *builder, const char *fmt, gint max, gboolean sum) +{ + unsigned long int num; + GtkEntry *entry; + char *tmp; + const char *text; + guint i, total = 0; + gboolean valid = TRUE; + GdkRGBA bgcolor; + + for (i = 0; i < 8; i++) { + tmp = g_strdup_printf (fmt, i); + entry = GTK_ENTRY (gtk_builder_get_object (builder, tmp)); + g_free (tmp); + g_assert (entry); + + text = gtk_entry_get_text (entry); + if (text) { + errno = 0; + num = strtol (text, NULL, 10); + if (errno || num < 0 || num > max) { + /* FIXME: only sets highlight color? */ + gdk_rgba_parse (&bgcolor, "red3"); + gtk_widget_override_background_color (GTK_WIDGET (entry), GTK_STATE_NORMAL, &bgcolor); + valid = FALSE; + } else + gtk_widget_override_background_color (GTK_WIDGET (entry), GTK_STATE_NORMAL, NULL); + + total += (guint) num; + } + } + if (sum && total != 100) + valid = FALSE; + + return valid; +} + +static void +pg_dialog_valid_func (GtkBuilder *builder) +{ + GtkDialog *dialog; + gboolean valid = FALSE; + + if (!uint_entries_validate (builder, "pg_pgid%u_entry", 7, FALSE)) + goto done; + if (!uint_entries_validate (builder, "pg_pgpct%u_entry", 100, TRUE)) + goto done; + if (!uint_entries_validate (builder, "pg_uppct%u_entry", 100, FALSE)) + goto done; + if (!uint_entries_validate (builder, "pg_up2tc%u_entry", 7, FALSE)) + goto done; + + valid = TRUE; + +done: + dialog = GTK_DIALOG (gtk_builder_get_object (builder, "pg_dialog")); + gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, valid); +} + + +static void +uint_filter_cb (GtkEditable *editable, + gchar *text, + gint length, + gint *position, + gpointer user_data) +{ + utils_filter_editable_on_insert_text (editable, + text, length, position, user_data, + utils_char_is_ascii_digit, + uint_filter_cb); +} + +static void +uint_entries_handle (GtkBuilder *builder, + NMSettingDcb *s_dcb, + const char *fmt, + guint (*get_func) (NMSettingDcb *s_dcb, guint n), + void (*set_func) (NMSettingDcb *s_dcb, guint n, guint val)) +{ + char *tmp; + GtkEntry *entry; + guint i; + const char *text; + + for (i = 0; i < 8; i++) { + tmp = g_strdup_printf (fmt, i); + entry = GTK_ENTRY (gtk_builder_get_object (builder, tmp)); + g_free (tmp); + g_assert (entry); + + if (get_func) { + tmp = g_strdup_printf ("%u", get_func (s_dcb, i)); + gtk_entry_set_text (entry, tmp); + g_free (tmp); + + g_signal_connect (entry, "insert-text", (GCallback) uint_filter_cb, NULL); + g_signal_connect_swapped (entry, "changed", (GCallback) pg_dialog_valid_func, builder); + } else if (set_func) { + unsigned long int num; + + text = gtk_entry_get_text (entry); + if (text) { + errno = 0; + num = strtol (text, NULL, 10); + if (errno == 0 && num >= 0 && num <= 100) + set_func (s_dcb, i, (guint) num); + } + } else + g_assert_not_reached (); + } +} + +static void +bool_entries_handle (GtkBuilder *builder, + NMSettingDcb *s_dcb, + const char *fmt, + gboolean (*get_func) (NMSettingDcb *s_dcb, guint n), + void (*set_func) (NMSettingDcb *s_dcb, guint n, gboolean val)) +{ + char *tmp; + GtkToggleButton *toggle; + guint i; + + for (i = 0; i < 8; i++) { + tmp = g_strdup_printf (fmt, i); + toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, tmp)); + g_free (tmp); + g_assert (toggle); + + if (get_func) + gtk_toggle_button_set_active (toggle, get_func (s_dcb, i)); + else if (set_func) + set_func (s_dcb, i, gtk_toggle_button_get_active (toggle)); + else + g_assert_not_reached (); + } +} + +static void +pg_dialog_show (CEPageDcb *self) +{ + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + CEPage *parent = CE_PAGE (self); + GtkWidget *dialog, *toplevel; + gint result; + + dialog = GTK_WIDGET (gtk_builder_get_object (parent->builder, "pg_dialog")); + g_assert (dialog); + toplevel = gtk_widget_get_toplevel (parent->page); + if (gtk_widget_is_toplevel (toplevel)) + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel)); + + uint_entries_handle (parent->builder, + priv->options, + "pg_pgid%u_entry", + nm_setting_dcb_get_priority_group_id, + NULL); + + uint_entries_handle (parent->builder, + priv->options, + "pg_pgpct%u_entry", + nm_setting_dcb_get_priority_group_bandwidth, + NULL); + + uint_entries_handle (parent->builder, + priv->options, + "pg_uppct%u_entry", + nm_setting_dcb_get_priority_bandwidth, + NULL); + + bool_entries_handle (parent->builder, + priv->options, + "pg_strict%u_checkbutton", + nm_setting_dcb_get_priority_strict_bandwidth, + NULL); + + uint_entries_handle (parent->builder, + priv->options, + "pg_up2tc%u_entry", + nm_setting_dcb_get_priority_traffic_class, + NULL); + + pg_dialog_valid_func (parent->builder); + + /* Run the dialog */ + result = gtk_dialog_run (GTK_DIALOG (dialog)); + if (result == GTK_RESPONSE_OK) { + uint_entries_handle (parent->builder, + priv->options, + "pg_pgid%u_entry", + NULL, + nm_setting_dcb_set_priority_group_id); + + uint_entries_handle (parent->builder, + priv->options, + "pg_pgpct%u_entry", + NULL, + nm_setting_dcb_set_priority_group_bandwidth); + + uint_entries_handle (parent->builder, + priv->options, + "pg_uppct%u_entry", + NULL, + nm_setting_dcb_set_priority_bandwidth); + + bool_entries_handle (parent->builder, + priv->options, + "pg_strict%u_checkbutton", + NULL, + nm_setting_dcb_set_priority_strict_bandwidth); + + uint_entries_handle (parent->builder, + priv->options, + "pg_up2tc%u_entry", + NULL, + nm_setting_dcb_set_priority_traffic_class); + } + + gtk_widget_hide (dialog); + ce_page_changed (CE_PAGE (self)); +} + +/***************************************************************************/ + +typedef void (*OptionsFunc) (CEPageDcb *self); + +typedef struct { + const char *prefix; + const char *flags_prop; + const char *priority_prop; + const OptionsFunc options_func; +} Feature; + +static const Feature features[] = { + { "fcoe", NM_SETTING_DCB_APP_FCOE_FLAGS, NM_SETTING_DCB_APP_FCOE_PRIORITY, fcoe_dialog_show }, + { "iscsi", NM_SETTING_DCB_APP_ISCSI_FLAGS, NM_SETTING_DCB_APP_ISCSI_PRIORITY, NULL }, + { "fip", NM_SETTING_DCB_APP_FIP_FLAGS, NM_SETTING_DCB_APP_FIP_PRIORITY, NULL }, + { "pfc", NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, NULL, pfc_dialog_show }, + { "pg", NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, NULL, pg_dialog_show }, +}; + +typedef struct { + const Feature *f; + GtkBuilder *builder; +} EnableInfo; + +static GtkWidget * +get_widget (GtkBuilder *builder, const char *prefix, const char *suffix) +{ + GtkWidget *widget; + char *s; + + s = g_strdup_printf ("%s%s", prefix, suffix); + widget = GTK_WIDGET (gtk_builder_get_object (builder, s)); + g_assert (widget); + g_free (s); + return widget; +} + +static void +enable_toggled_cb (GtkToggleButton *button, EnableInfo *info) +{ + gboolean enabled = gtk_toggle_button_get_active (button); + GtkWidget *widget; + + /* Set other feature widgets sensitive or not depending on enabled */ + + widget = get_widget (info->builder, info->f->prefix, "_advertise_checkbutton"); + gtk_widget_set_sensitive (widget, enabled); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); + + widget = get_widget (info->builder, info->f->prefix, "_willing_checkbutton"); + gtk_widget_set_sensitive (widget, enabled); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); + + if (info->f->priority_prop) { + widget = get_widget (info->builder, info->f->prefix, "_priority_combo"); + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); + gtk_widget_set_sensitive (widget, enabled); + } + + if (info->f->options_func) { + widget = get_widget (info->builder, info->f->prefix, "_options_button"); + gtk_widget_set_sensitive (widget, enabled); + } +} + +static void +feature_setup (CEPageDcb *self, NMSettingDcb *s_dcb, const Feature *f) +{ + CEPage *parent = CE_PAGE (self); + GtkWidget *widget; + NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE; + gboolean enabled; + EnableInfo *info; + + if (s_dcb) + g_object_get (G_OBJECT (s_dcb), f->flags_prop, (guint32 *) &flags, NULL); + enabled = flags & NM_SETTING_DCB_FLAG_ENABLE; + + /* Enable */ + widget = get_widget (parent->builder, f->prefix, "_enable_checkbutton"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), enabled); + + info = g_malloc0 (sizeof (EnableInfo)); + info->f = f; + info->builder = parent->builder; +g_message ("setting up enable button"); + g_signal_connect (widget, "toggled", G_CALLBACK (enable_toggled_cb), info); + g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) g_free, info); + + /* Advertise */ + widget = get_widget (parent->builder, f->prefix, "_advertise_checkbutton"); + gtk_widget_set_sensitive (widget, enabled); + if (enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), flags & NM_SETTING_DCB_FLAG_ADVERTISE); + g_signal_connect_swapped (widget, "toggled", G_CALLBACK (ce_page_changed), self); + + /* Willing */ + widget = get_widget (parent->builder, f->prefix, "_willing_checkbutton"); + gtk_widget_set_sensitive (widget, enabled); + if (enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), flags & NM_SETTING_DCB_FLAG_WILLING); + g_signal_connect_swapped (widget, "toggled", G_CALLBACK (ce_page_changed), self); + + if (f->priority_prop) { + gint priority = -1; + + if (s_dcb) + g_object_get (G_OBJECT (s_dcb), f->priority_prop, &priority, NULL); + priority = CLAMP (priority, -1, 7); + + widget = get_widget (parent->builder, f->prefix, "_priority_combo"); + gtk_widget_set_sensitive (widget, enabled); + if (enabled) + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), priority + 1); + g_signal_connect_swapped (widget, "changed", G_CALLBACK (ce_page_changed), self); + } + + if (f->options_func) { + widget = get_widget (parent->builder, f->prefix, "_options_button"); + gtk_widget_set_sensitive (widget, enabled); + g_signal_connect_swapped (widget, "clicked", G_CALLBACK (f->options_func), self); + } +} + +static void +enable_toggled (GtkToggleButton *button, gpointer user_data) +{ + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (user_data); + + gtk_widget_set_sensitive (GTK_WIDGET (priv->box), gtk_toggle_button_get_active (button)); + ce_page_changed (CE_PAGE (user_data)); +} + +static void +finish_setup (CEPageDcb *self, gpointer unused, GError *error, gpointer user_data) +{ + CEPage *parent = CE_PAGE (self); + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + NMSettingDcb *s_dcb = nm_connection_get_setting_dcb (parent->connection); + guint i; + + if (error) + return; + + gtk_toggle_button_set_active (priv->enabled, priv->initial_have_dcb); + g_signal_connect (priv->enabled, "toggled", G_CALLBACK (enable_toggled), self); + gtk_widget_set_sensitive (GTK_WIDGET (priv->box), priv->initial_have_dcb); + + for (i = 0; i < G_N_ELEMENTS (features); i++) + feature_setup (self, s_dcb, &features[i]); +} + +CEPage * +ce_page_dcb_new (NMConnection *connection, + GtkWindow *parent_window, + NMClient *client, + NMRemoteSettings *settings, + const char **out_secrets_setting_name, + GError **error) +{ + CEPageDcb *self; + CEPageDcbPrivate *priv; + CEPage *parent; + NMSettingDcb *s_dcb; + + self = CE_PAGE_DCB (ce_page_new (CE_TYPE_PAGE_DCB, + connection, + parent_window, + client, + settings, + UIDIR "/ce-page-dcb.ui", + "DcbPage", + _("DCB"))); + if (!self) { + g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Could not load DCB user interface.")); + return NULL; + } + + priv = CE_PAGE_DCB_GET_PRIVATE (self); + parent = CE_PAGE (self); + + priv->enabled = GTK_TOGGLE_BUTTON (gtk_builder_get_object (parent->builder, "dcb_enabled_checkbutton")); + priv->box = GTK_BOX (gtk_builder_get_object (parent->builder, "dcb_box")); + + s_dcb = nm_connection_get_setting_dcb (connection); + if (s_dcb) { + priv->initial_have_dcb = TRUE; + priv->options = (NMSettingDcb *) nm_setting_duplicate (NM_SETTING (s_dcb)); + } else + priv->options = (NMSettingDcb *) nm_setting_dcb_new (); + + g_signal_connect (self, "initialized", G_CALLBACK (finish_setup), NULL); + + return CE_PAGE (self); +} + +static void +ui_to_setting (CEPageDcb *self, NMSettingDcb *s_dcb) +{ + CEPage *parent = CE_PAGE (self); + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE; + gboolean enabled, b; + const char *tmp; + guint i, num; + + enabled = gtk_toggle_button_get_active (priv->enabled); + for (i = 0; i < G_N_ELEMENTS (features); i++) { + const Feature *f = &features[i]; + GtkWidget *widget; + + flags = NM_SETTING_DCB_FLAG_NONE; + + /* Enable */ + widget = get_widget (parent->builder, f->prefix, "_enable_checkbutton"); + if (enabled && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + flags |= NM_SETTING_DCB_FLAG_ENABLE; + + /* Advertise */ + widget = get_widget (parent->builder, f->prefix, "_advertise_checkbutton"); + if (enabled && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + flags |= NM_SETTING_DCB_FLAG_ADVERTISE; + + /* Willing */ + widget = get_widget (parent->builder, f->prefix, "_willing_checkbutton"); + if (enabled && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + flags |= NM_SETTING_DCB_FLAG_WILLING; + + g_object_set (G_OBJECT (s_dcb), f->flags_prop, flags, NULL); + + if (f->priority_prop) { + gint idx = 0; + + widget = get_widget (parent->builder, f->prefix, "_priority_combo"); + if (enabled) + idx = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); + g_object_set (G_OBJECT (s_dcb), f->priority_prop, (gint) (idx - 1), NULL); + } + } + + /* FCoE Mode */ + flags = nm_setting_dcb_get_app_fcoe_flags (s_dcb); + tmp = NULL; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + tmp = nm_setting_dcb_get_app_fcoe_mode (priv->options); + g_object_set (G_OBJECT (s_dcb), + NM_SETTING_DCB_APP_FCOE_MODE, tmp ? tmp : NM_SETTING_DCB_FCOE_MODE_FABRIC, + NULL); + + /* Priority Flow Control */ + flags = nm_setting_dcb_get_priority_flow_control_flags (s_dcb); + for (i = 0; i < 8; i++) { + b = FALSE; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + b = nm_setting_dcb_get_priority_flow_control (priv->options, i); + nm_setting_dcb_set_priority_flow_control (s_dcb, i, b); + } + + /* Priority Groups */ + flags = nm_setting_dcb_get_priority_group_flags (s_dcb); + for (i = 0; i < 8; i++) { + /* Group ID */ + num = 0; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + num = nm_setting_dcb_get_priority_group_id (priv->options, i); + nm_setting_dcb_set_priority_group_id (s_dcb, i, num); + + num = 0; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + num = nm_setting_dcb_get_priority_group_bandwidth (priv->options, i); + nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, num); + + num = 0; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + num = nm_setting_dcb_get_priority_bandwidth (priv->options, i); + nm_setting_dcb_set_priority_bandwidth (s_dcb, i, num); + + b = 0; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + b = nm_setting_dcb_get_priority_strict_bandwidth (priv->options, i); + nm_setting_dcb_set_priority_strict_bandwidth (s_dcb, i, b); + + num = 0; + if (flags & NM_SETTING_DCB_FLAG_ENABLE) + num = nm_setting_dcb_get_priority_traffic_class (priv->options, i); + nm_setting_dcb_set_priority_traffic_class (s_dcb, i, num); + } + +} + +static gboolean +validate (CEPage *page, NMConnection *connection, GError **error) +{ + CEPageDcb *self = CE_PAGE_DCB (page); + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (self); + NMSettingDcb *s_dcb; + + if (!gtk_toggle_button_get_active (priv->enabled)) { + nm_connection_remove_setting (connection, NM_TYPE_SETTING_DCB); + return TRUE; + } + + s_dcb = nm_connection_get_setting_dcb (connection); + if (!s_dcb) { + s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); + nm_connection_add_setting (connection, NM_SETTING (s_dcb)); + } + ui_to_setting (self, s_dcb); + + return nm_setting_verify (NM_SETTING (s_dcb), NULL, error); +} + +static void +ce_page_dcb_init (CEPageDcb *self) +{ +} + +static void +dispose (GObject *object) +{ + CEPageDcbPrivate *priv = CE_PAGE_DCB_GET_PRIVATE (object); + + g_clear_object (&priv->options); + + G_OBJECT_CLASS (ce_page_dcb_parent_class)->dispose (object); +} + +static void +ce_page_dcb_class_init (CEPageDcbClass *security_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (security_class); + CEPageClass *parent_class = CE_PAGE_CLASS (security_class); + + g_type_class_add_private (object_class, sizeof (CEPageDcbPrivate)); + + /* virtual methods */ + object_class->dispose = dispose; + + parent_class->validate = validate; +} diff --git a/src/connection-editor/page-dcb.h b/src/connection-editor/page-dcb.h new file mode 100644 index 00000000..2420b265 --- /dev/null +++ b/src/connection-editor/page-dcb.h @@ -0,0 +1,59 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager Connection editor -- Connection editor for NetworkManager + * + * Dan Williams <dcbw@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * (C) Copyright 2013 Red Hat, Inc. + */ + +#ifndef __PAGE_DCB_H__ +#define __PAGE_DCB_H__ + +#include "nm-connection-editor.h" + +#include <nm-connection.h> + +#include <glib.h> +#include <glib-object.h> + +#include "ce-page.h" + +#define CE_TYPE_PAGE_DCB (ce_page_dcb_get_type ()) +#define CE_PAGE_DCB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CE_TYPE_PAGE_DCB, CEPageDcb)) +#define CE_PAGE_DCB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CE_TYPE_PAGE_DCB, CEPageDcbClass)) +#define CE_IS_PAGE_DCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CE_TYPE_PAGE_DCB)) +#define CE_IS_PAGE_DCB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CE_TYPE_PAGE_DCB)) +#define CE_PAGE_DCB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CE_TYPE_PAGE_DCB, CEPageDcbClass)) + +typedef struct { + CEPage parent; +} CEPageDcb; + +typedef struct { + CEPageClass parent; +} CEPageDcbClass; + +GType ce_page_dcb_get_type (void); + +CEPage *ce_page_dcb_new (NMConnection *connection, + GtkWindow *parent, + NMClient *client, + NMRemoteSettings *settings, + const char **out_secrets_setting_name, + GError **error); + +#endif /* __PAGE_DCB_H__ */ |