Index: /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/avx/models/network/interface/__init__.py
===================================================================
--- /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/avx/models/network/interface/__init__.py	(revision 8836)
+++ /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/avx/models/network/interface/__init__.py	(working copy)
@@ -176,6 +176,9 @@
     workmode_tgt = FieldGroup(verbose_name=_('Work Mode'), level=ADVANCED, fields={
         'workmode': AssoField2(verbose_name=_('Work Mode'), tgt='network.interface.WorkMode.port_name', mul='1', pos='left', optional=True)
     })
+    shutdown_tgt = FieldGroup(verbose_name=_('Interface Shutdown'), level=ADVANCED, fields={
+        'shutdown': AssoField2(verbose_name=_('Interface Shutdown'), tgt='network.interface.Shutdown.port_name', mul='1', pos='left', optional=True)
+    })
 
     class Meta:
         verbose_name = _('Traffic Interface')
@@ -639,3 +642,63 @@
             mark_expire_all(PortVF)
             return
 
+class Shutdown(ANModel):
+    port_name = AssoField2(verbose_name=_('Port Name'), tgt='network.interface.TrafficInterface.shutdown', mul='*', pos='right', primary_key=True)
+    shutdown_enable = BooleanField(verbose_name=_('Enable'), lexical=('True','False'), display=('',''), default=False, optional=True)
+
+    class Meta:
+        verbose_name = 'Interface Shutdown'
+        show_im_export_button = False
+
+    class Manager(CLIManager):
+        def _get(self, pk_dict):
+            return self._filter(pk_dict).get(pk_dict)
+
+        def _filter(self, pk_list):
+            self.cli.set_enable()
+            res = []
+            if pk_list:
+                port_name = pk_list['port_name'][0]['interface_name']
+                # status will be:
+                # down(Administratively down)  Speed: Unknown! Duplex: Unknown! Auto-negotiation: off 
+                # otherwise:
+                # status: active  Speed: 1000Mb/s Duplex: Full Auto-negotiation: on 
+                result = self.cli.cmd('show interface %s' % port_name,
+                                      RegexParser('(?P<port_name>port[0-9]+)\((?P<physical_name>[^\)]+)\):\s*(?:.*\n\s*)*status:\s*(?P<status>[^\n\r]+)', MATCHALL, reflags=re.S))
+                match_flag = False
+                for each in result:
+                    if port_name != "mgmt" and each["port_name"] == port_name and 'down(Administratively down)' in each['status']:
+                        match_flag = True
+                        res.append({"port_name": port_name, "shutdown_enable": True})
+                        break
+                if not match_flag:
+                    res.append({"port_name": port_name, "shutdown_enable": False})
+            else:
+                result = self.cli.cmd('show interface',
+                                      RegexParser('(?P<port_name>port[0-9]+)\((?P<physical_name>[^\)]+)\):\s*(?:.*\n\s*)*status:\s*(?P<status>[^\n\r]+)', MATCHALL, reflags=re.S),
+                                      RegexParser('(?P<port_index>port[0-9]+):', MATCHALL, reflags=re.S))
+                for each in result[1]:
+                    match_flag = False
+                    for item in result[0]:
+                        if item["port_name"] == each["port_index"] and 'no carrier' in each['status']:
+                            match_flag = True
+                            res.append({"port_name": item["port_name"], "shutdown_enable": True})
+                            break
+                    if not match_flag:
+                        res.append({"port_name": each["port_index"], "shutdown_enable": False})
+            return QuerySet(self._model, res)
+
+        def _update(self, instance):
+            self.cli.set_config()
+            port_name = instance.port_name[0]["interface_name"]
+            if instance.shutdown_enable:
+                result = self.cli.cmd('interface shutdown %s' % port_name,
+                                RegexParser('shutdown', match_exception=CLICmdNormal, exclusive=True),
+                                BlankParser(nonblank_exception=CLICmdError, supplement=True))
+            else:
+                result = self.cli.cmd('no interface shutdown %s' % port_name,
+                                RegexParser('startup', match_exception=CLICmdNormal, exclusive=True),
+                                BlankParser(nonblank_exception=CLICmdError, supplement=True))
+            mark_expire_all(TrafficInterface)
+            mark_expire_all(PortVF)
+            return
Index: /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/network.service.js
===================================================================
--- /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/network.service.js	(revision 8836)
+++ /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/network.service.js	(working copy)
@@ -86,7 +86,9 @@
                 add_static_route: add_static_route,
                 delete_static_route: delete_static_route,
                 clear_default_route: clear_default_route,
-                update_vlan_vf_of_port: update_vlan_vf_of_port
+                update_vlan_vf_of_port: update_vlan_vf_of_port,
+                get_shutdown: get_shutdown,
+                set_shutdown: set_shutdown
             };
             function bind_port_vf_to_va(data) {
                 return apiService.post('/api/avx/network/interface/PortVF/_add', data);
@@ -432,5 +434,12 @@
             function clear_default_route(action){
                  return apiService.post('/api/avx/network/route/DefaultRoutingSetting/_perform?action=' + action + '&options=%7B%22__pk_list%22%3A%5B%22%22%5D%7D', {});
             }
+            function get_shutdown(port_name) {
+                return apiService.get('/api/avx/network/interface/Shutdown/_get_asso_list_data?initial_filter=%7B"port_name"%3A%5B%7B"interface_name"%3A"'+port_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
+            }
+            function set_shutdown(port_name, enable) {
+                var post_data = {"post_data": JSON.stringify({"shutdown_enable": enable})};
+                return apiService.post('/api/avx/network/interface/Shutdown/_update/port_name/%5B%7B%22interface_name%22%3A%20%22'+ port_name +'%22%2C%20%22_asso_idx%22%3A%200%7D%5D', post_data);
+            }
         }
 ]);
\ No newline at end of file
Index: /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.controller.js
===================================================================
--- /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.controller.js	(revision 8836)
+++ /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.controller.js	(working copy)
@@ -21,6 +21,8 @@
             $scope.allow_config = $rootScope.allow_config;
             $scope.onLabel = "Passthrough";
             $scope.offLabel = "SR-IOV";
+            $scope.enLabel = "&nbsp;&nbsp;&nbsp;&nbsp;Enabled&nbsp;&nbsp;&nbsp;"; // Enabled, add '&nbsp;' as space
+            $scope.disLabel = "Disabled";
 
             var showProgressBar = function() {
                 var modalInstance = $uibModal.open({
@@ -59,6 +61,32 @@
                             } else {
                                 $state.go("index.network.interface.sys_interface", {}, {reload:true})
                             }
+                        }
+                    });
+            };
+
+            resourceViewModel.get_shutdown = function(port_name) {
+                netResourceService
+                    .get_shutdown(port_name)
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            resourceViewModel.shutdown = res.data[0]["shutdown_enable"];
+                            resourceViewModel.shutdown_origin = resourceViewModel.shutdown;
+                        }
+                    });
+            };
+
+            resourceViewModel.set_shutdown = function(port_name, enable) {
+                netResourceService
+                    .set_shutdown(port_name, enable)
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                                resourceViewModel.get_shutdown(port_name);
+                            } else {
+                                $state.go("index.network.interface.sys_interface", {}, {reload:true})
+                            }
                         }
                     });
             };
Index: /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.html
===================================================================
--- /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.html	(revision 8836)
+++ /branches/rel_avx_2_7_2/src/webui/webui/htdocs/new/src/client/app/modules/network/submenu/interface/sys_interface/sys_interface.html	(working copy)
@@ -42,7 +42,7 @@
                             </tr>
                         </thead>
                         <tbody ng-show="displayedCollection.length">
-                            <tr ng-repeat="row in displayedCollection" ng-click="interface.get_vf_occupation(row.port_name, row.vf_available);interface.set_port_index(row.port_name);interface.port_detail_index = 1;interface.system_detail_index = 0;interface.system_index = 0;interface.get_work_mode(row.port_name)" style="cursor: pointer;">
+                            <tr ng-repeat="row in displayedCollection" ng-click="interface.get_vf_occupation(row.port_name, row.vf_available);interface.set_port_index(row.port_name);interface.port_detail_index = 1;interface.system_detail_index = 0;interface.system_index = 0;interface.get_work_mode(row.port_name);interface.get_shutdown(row.port_name)" style="cursor: pointer;">
                                 <td>{{row.domain}}</td>
                                 <td>{{row.port_name}}</td>
                                 <td>{{row.physical_name}}</td>
@@ -251,7 +251,7 @@
                    <a href ng-click="interface.select_detail(1)">{{'Interface Information'|T}}</a>
                 </li>
                 <li ng-class="{ active:interface.isSelect_detail(6)}">
-                   <a href ng-click="interface.select_detail(6);interface.get_work_mode(interface.current_port_data.port_name)">{{'Interface Setting'|T}}</a>
+                   <a href ng-click="interface.select_detail(6);interface.get_work_mode(interface.current_port_data.port_name);interface.get_shutdown(interface.current_port_data.port_name)">{{'Interface Setting'|T}}</a>
                 </li>
                 <!-- <li ng-class="{ active:interface.isSelect_detail(7)}" ng-if="interface.work_mode_origin">
                    <a href ng-click="interface.select_detail(7)">{{'Bind VA Instance'|T}}</a>
@@ -327,9 +327,17 @@
                             </div>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Interface Shutdown'|T}}</label>
+                        <div class="col-md-9">
+                            <div class="switch">
+                                <input bs-switch ng-model="interface.shutdown" type="checkbox" switch-active="{{allow_config}}" switch-on-text="{{enLabel}}" switch-off-text="{{disLabel}}" name="interfaceShutdownEnable" resettable>
+                            </div>
+                        </div>
+                    </div>
                     <div ng-show="work_mode.$dirty">
-                        <button type="submit" class="btn btn-primary" ng-click="interface.set_work_mode(interface.current_port_data.port_name, interface.work_mode)">{{'Apply Changes'|T}}</button>
-                        <button type="reset" class="btn btn-default btn-cancel" ng-click="interface.get_work_mode(interface.current_port_data.port_name)" unsaved-warning-clear>{{'Cancel'|T}}</button>
+                        <button type="submit" class="btn btn-primary" ng-click="interface.set_work_mode(interface.current_port_data.port_name, interface.work_mode);interface.set_shutdown(interface.current_port_data.port_name, interface.shutdown)">{{'Apply Changes'|T}}</button>
+                        <button type="reset" class="btn btn-default btn-cancel" ng-click="interface.get_work_mode(interface.current_port_data.port_name);interface.get_shutdown(interface.current_port_data.port_name)" unsaved-warning-clear>{{'Cancel'|T}}</button>
                     </div>
                 </form>
             </div>
