def create(cls, name, mgmt_ip, mgmt_network,
               mgmt_interface=0,
               log_server_ref=None,
               default_nat=False,
               reverse_connection=False,
               domain_server_address=None, zone_ref=None,
               enable_antivirus=False, enable_gti=False,
               location_ref=None, enable_ospf=False,
               sidewinder_proxy_enabled=False,
               ospf_profile=None, snmp=None, comment=None, **kw):
        """ 
        Create a single layer 3 firewall with management interface and DNS. 
        Provide the `interfaces` keyword argument if adding multiple additional interfaces.
        Interfaces can be one of any valid interface for a layer 3 firewall. Unless the
        interface type is specified, physical_interface is assumed.
        
        Valid interface types:
            - physical_interface (default if not specified)
            - tunnel_interface
    
        If providing all engine interfaces in a single operation, see :py:meth:`~create_bulk`
        for the proper format.
                  
        :param str name: name of firewall engine
        :param str mgmt_ip: ip address of management interface
        :param str mgmt_network: management network in cidr format
        :param str log_server_ref: (optional) href to log_server instance for fw
        :param int mgmt_interface: (optional) interface for management from SMC to fw
        :param list domain_server_address: (optional) DNS server addresses
        :param str zone_ref: zone name, str href or zone name for management interface
            (created if not found)
        :param bool reverse_connection: should the NGFW be the mgmt initiator (used when behind NAT)
        :param bool default_nat: (optional) Whether to enable default NAT for outbound
        :param bool enable_antivirus: (optional) Enable antivirus (required DNS)
        :param bool enable_gti: (optional) Enable GTI
        :param bool sidewinder_proxy_enabled: Enable Sidewinder proxy functionality
        :param str location_ref: location href or not for engine if needed to contact SMC
            behind NAT (created if not found)
        :param bool enable_ospf: whether to turn OSPF on within engine
        :param str ospf_profile: optional OSPF profile to use on engine, by ref
        :param kw: optional keyword arguments specifying additional interfaces  
        :raises CreateEngineFailed: Failure to create with reason
        :return: :py:class:`smc.core.engine.Engine`
        """
        interfaces = kw.pop('interfaces', [])
        # Add the primary interface to the interface list
        interface = {'interface_id': mgmt_interface,
                     'interface': 'single_node_interface',
                     'zone_ref': zone_ref,
                     'interfaces': [{
                         'nodes': [{'address': mgmt_ip, 'network_value': mgmt_network, 'nodeid': 1,
                                    'reverse_connection': reverse_connection}]
                         }]
                     }
        interfaces.append(interface)
        
        return Layer3Firewall.create_bulk(
            name=name,
            node_type='firewall_node',
            interfaces=interfaces,
            primary_mgt=mgmt_interface,
            domain_server_address=domain_server_address,
            log_server_ref=log_server_ref,
            nodes=1, enable_gti=enable_gti,
            enable_antivirus=enable_antivirus,
            sidewinder_proxy_enabled=sidewinder_proxy_enabled,
            default_nat=default_nat,
            location_ref=location_ref,
            enable_ospf=enable_ospf,
            ospf_profile=ospf_profile, snmp=snmp,
            comment=comment, **kw)