Skip to content

Commit

Permalink
feat(middlewared/network): add interfaces.query
Browse files Browse the repository at this point in the history
Ticket:	#27596
  • Loading branch information
william-gr committed Jan 8, 2018
1 parent cc60bd6 commit 4ec0990
Showing 1 changed file with 53 additions and 2 deletions.
55 changes: 53 additions & 2 deletions src/middlewared/middlewared/plugins/network.py
@@ -1,5 +1,5 @@
from middlewared.service import Service, private
from middlewared.utils import Popen
from middlewared.service import Service, filterable, private
from middlewared.utils import Popen, filter_list
from middlewared.schema import accepts, Str

import asyncio
Expand Down Expand Up @@ -61,6 +61,57 @@ def dhclient_leases(interface):

class InterfacesService(Service):

@filterable
def query(self, filters, options):
data = []
for name, iface in netif.list_interfaces().items():
data.append(self.iface_extend(iface.__getstate__()))
return filter_list(data, filters, options)

@private
def iface_extend(self, iface):
iface.update({
'configured_aliases': [],
'dhcp': False,
})
config = self.middleware.call_sync('datastore.query', 'network.interfaces', [('int_interface', '=', iface['name'])])
if not config:
return iface
config = config[0]

if config['int_dhcp']:
iface['dhcp'] = True
else:
if config['int_ipv4address']:
iface['configured_aliases'].append({
'type': 'INET',
'address': config['int_ipv4address'],
'netmask': int(config['int_v4netmaskbit']),
})
if config['int_ipv6address']:
iface['configured_aliases'].append({
'type': 'INET6',
'address': config['int_ipv6address'],
'netmask': int(config['int_v6netmaskbit']),
})

for alias in self.middleware.call_sync('datastore.query', 'network.alias', [('alias_interface', '=', config['id'])]):

if alias['alias_v4address']:
iface['configured_aliases'].append({
'type': 'INET',
'address': alias['alias_v4address'],
'netmask': int(alias['alias_v4netmaskbit']),
})
if alias['alias_v6address']:
iface['configured_aliases'].append({
'type': 'INET6',
'address': alias['alias_v6address'],
'netmask': int(alias['alias_v6netmaskbit']),
})

return iface

@private
async def sync(self):
"""
Expand Down

0 comments on commit 4ec0990

Please sign in to comment.