diff --git a/lib/refrepo/firmwares.rb b/lib/refrepo/firmwares.rb
index 6bcc0ffd9e33a34d75f203406353238be7b56518..47aac2db065e856584703a9e1ddbc8320ba5699b 100644
--- a/lib/refrepo/firmwares.rb
+++ b/lib/refrepo/firmwares.rb
@@ -52,7 +52,7 @@ def gen_firmwares_tables
          }
        end
        nodesets = nodes.group_by { |e| e.except('uid') }.map do |e|
-         e[1] = e[1].map { |f| f['uid'] } ; e
+         e[1] = e[1].map { |f| f['uid'] }
          e[1] = `echo #{e[1].join(',')} | nodeset -f`.chomp
          e
        end
@@ -63,6 +63,31 @@ def gen_firmwares_tables
        end
     end
   end
+  
+  # NICs table
+  nics = []
+  data['sites'].keys.each do |site|
+    data['sites'][site]['clusters'].keys.each do |cluster|
+       data['sites'][site]['clusters'][cluster]['nodes'].keys.each do |node|
+         nics += data['sites'][site]['clusters'][cluster]['nodes'][node]['network_adapters'].
+           select { |ni| ni['mountable'] }.
+           map do |ni|
+             {
+               'address' => ni['network_address'],
+               'interface' => ni['interface'],
+               'vendor' => ni['vendor'],
+               'model' => ni['model'],
+               'firmware_version' => ni['firmware_version']
+             }
+           end
+       end
+    end
+  end
+  nicsets = nics.group_by { |e| e.except('address') }.map do |e|
+    e[1] = e[1].map { |f| f['address'] }
+    nodes = `echo #{e[1].join(',')} | nodeset -f`.chomp
+    e[0].merge( { 'nodes' => nodes, 'nodes_count' => e[1].length } )
+  end
 
   puts <<-EOF
 <!DOCTYPE html>
@@ -153,6 +178,67 @@ def gen_firmwares_tables
       } );
     } );
 </script>
+
+<h3>NICs</h3>
+  <div class="table-responsive"><div class='container-fluid'>
+   <table id="table1" class="table table-bordered table-hover table-condensed text-center table-reducedrowheight">
+     <thead>
+       <tr>
+         <th class="text-center">Interface</th>
+         <th class="text-center">Vendor</th>
+         <th class="text-center">Model</th>
+         <th class="text-center">Firmware</th>
+         <th class="text-center">Interfaces</th>
+         <th class="text-center">Interfaces count</th>
+       </tr>
+     </thead>
+     <tfoot style="display: table-header-group;">
+     <tr>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+       <td><input type="text" placeholder="" size="2" style="width:100%;" /></td>
+     </tr>
+     </tfoot>
+     <tbody>
+     EOF
+     nicsets.each do |r|
+       puts <<-EOF
+<tr>
+<td class="text-nowrap">#{r['interface']}</td>
+<td class="text-nowrap">#{r['vendor']}</td>
+<td class="text-nowrap">#{r['model']}</td>
+<td class="text-nowrap">#{r['firmware_version']}</td>
+<td>#{r['nodes']}</td>
+<td class="text-nowrap">#{r['nodes_count']}</td>
+      </tr>
+      EOF
+     end
+     puts <<-EOF
+             </tbody>
+   </table>
+   </div>
+   </div>
+   </div>
+  <script type="text/javascript" class="init">
+    $('#table1').DataTable(
+         { "bPaginate": false, }
+    ).columns().every( function () {
+      var that = this;
+
+      $( 'input', this.footer() ).on( 'keyup change', function () {
+        if ( that.search() !== this.value ) {
+          that
+            .search( this.value )
+            .draw();
+        }
+      } );
+    } );
+</script>
+
+
 </body>
 </html>
   EOF