1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-19 09:47:20 +01:00
fwbuilder/src/compiler_lib/procurveInterfaces.cpp

117 lines
3.6 KiB
C++

/*
Firewall Builder
Copyright (C) 2009 NetCitadel, LLC
Author: Vadim Kurland vadim@fwbuilder.org
$Id$
This program is free software which we release under the GNU General Public
License. You may redistribute and/or modify this program under the terms
of that 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.
To get a copy of the GNU General Public License, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "procurveInterfaces.h"
#include "fwbuilder/Interface.h"
#include <QRegExp>
#include <QObject>
using namespace std;
using namespace libfwbuilder;
// simple name validation: does not allow space and "-"
// However some platform permit space (procurve).
bool procurveInterfaces::basicValidateInterfaceName(const QString &name, QString &err)
{
err = "";
return true;
}
/*
* The difference is that in ProCurve, vlan interfaces have names like
* "VLAN 2". We should permit white space between "vlan" and the
* number. It is unclear whether "vlan" and "Vlan" are allowed besides
* "VLAN".
*/
bool procurveInterfaces::parseVlan(
const QString &name, QString *base_name, int *vlan_id)
{
QRegExp vlan_name_pattern("(vlan|Vlan|VLAN) (\\d{1,})");
if (vlan_name_pattern.indexIn(name) != -1)
{
if (base_name!=NULL) *base_name = vlan_name_pattern.cap(1);
if (vlan_id!=NULL) *vlan_id = vlan_name_pattern.cap(2).toInt();
return true;
}
return false;
}
/*
* In ProCurve, parent interface and vlan interface names have nothing
* in common and can not be verified.
*/
bool procurveInterfaces::isValidVlanInterfaceName(const QString &subint_name,
const QString &parent_name,
QString &err)
{
if (!looksLikeVlanInterface(subint_name))
{
err = QObject::tr("'%1' is not a valid vlan interface name").arg(subint_name);
return false;
}
QString parent_name_from_regex;
int vlan_id;
if (parseVlan(subint_name, &parent_name_from_regex, &vlan_id))
{
if (vlan_id > 4095)
{
err = QObject::tr("'%1' looks like a name of a vlan interface "
"but vlan ID it defines is outside of the valid range."
"").arg(subint_name);
return false;
}
}
return true;
}
/*
* many switch ports can be part of the same vlan. It would be ideal
* if I could make interface objects that represent siwtch ports a
* subinterfaces of a vlan interface. Unfortunately this is reverse of
* our normal model, where vlans are subinterfaces of ethernet
* interface objects. Until I figure this out, there will be no
* restrictions on ProCurve interface objects.
*/
bool procurveInterfaces::validateInterface(FWObject *target,
FWObject *intf,
bool check_types,
QString &err)
{
return true;
}
bool procurveInterfaces::validateInterface(FWObject *target,
const QString &interface_name,
QString &err)
{
return true;
}