diff --git a/common/icmp.cpp b/common/icmp.cpp
index e7f6267..651efb5 100644
--- a/common/icmp.cpp
+++ b/common/icmp.cpp
@@ -17,165 +17,16 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
-
#include "icmp.h"
-
-#include
-#include
-
-enum IcmpType
-{
- kIcmpEchoReply = 0,
- kIcmpDestinationUnreachable = 3,
- kIcmpSourceQuench = 4,
- kIcmpRedirect = 5,
- kIcmpEchoRequest = 8,
- kIcmpTimeExceeded = 11,
- kIcmpParameterProblem = 12,
- kIcmpTimestampRequest = 13,
- kIcmpTimestampReply = 14,
- kIcmpInformationRequest = 15,
- kIcmpInformationReply = 16,
- kIcmpAddressMaskRequest = 17,
- kIcmpAddressMaskReply = 18
-};
-
-enum Icmp6Type
-{
- kIcmp6DestinationUnreachable = 1,
- kIcmp6PacketTooBig = 2,
- kIcmp6TimeExceeded = 3,
- kIcmp6ParameterProblem = 4,
- kIcmp6EchoRequest = 128,
- kIcmp6EchoReply = 129,
- kIcmp6RouterSolicitation = 133,
- kIcmp6RouterAdvertisement = 134,
- kIcmp6NeighbourSolicitation = 135,
- kIcmp6NeighbourAdvertisement = 136,
- kIcmp6Redirect = 137,
- kIcmp6InformationQuery = 139,
- kIcmp6InformationResponse = 140
-};
-
-static QSet icmpIdSeqSet = QSet()
- << kIcmpEchoRequest
- << kIcmpEchoReply
- << kIcmpInformationRequest
- << kIcmpInformationReply;
-
-static QSet icmp6IdSeqSet = QSet()
- << kIcmp6EchoRequest
- << kIcmp6EchoReply;
-
-static bool isIdSeqType(OstProto::Icmp::Version ver, int type)
-{
- //qDebug("%s: ver = %d, type = %d", __FUNCTION__, ver, type);
- switch(ver)
- {
- case OstProto::Icmp::kIcmp4:
- return icmpIdSeqSet.contains(type);
- case OstProto::Icmp::kIcmp6:
- return icmp6IdSeqSet.contains(type);
- default:
- break;
- }
-
- Q_ASSERT(false); // unreachable
- return false;
-}
-
-IcmpConfigForm::IcmpConfigForm(QWidget *parent)
- : QWidget(parent)
-{
- versionGroup = new QButtonGroup(this);
- setupUi(this);
-
- // auto-connect's not working, for some reason I can't figure out!
- // slot name changed to when_ instead of on_ so that connectSlotsByName()
- // doesn't complain
- connect(versionGroup,
- SIGNAL(buttonClicked(int)),
- SLOT(when_versionGroup_buttonClicked(int)));
-
- versionGroup->addButton(icmp4Button, OstProto::Icmp::kIcmp4);
- versionGroup->addButton(icmp6Button, OstProto::Icmp::kIcmp6);
-
- typeCombo->setValidator(new QIntValidator(0, 0xFF, this));
-
- icmp4Button->click();
-
- idEdit->setValidator(new QIntValidator(0, 0xFFFF, this));
- seqEdit->setValidator(new QIntValidator(0, 0xFFFF, this));
-}
-
-void IcmpConfigForm::on_typeCombo_currentIndexChanged(int /*index*/)
-{
- idSeqFrame->setVisible(
- isIdSeqType(
- OstProto::Icmp::Version(versionGroup->checkedId()),
- typeCombo->currentValue()));
-}
-
-void IcmpConfigForm::when_versionGroup_buttonClicked(int id)
-{
- int value = typeCombo->currentValue();
-
- typeCombo->clear();
-
- switch(id)
- {
- case OstProto::Icmp::kIcmp4:
- typeCombo->addItem(kIcmpEchoReply, "Echo Reply");
- typeCombo->addItem(kIcmpDestinationUnreachable,
- "Destination Unreachable");
- typeCombo->addItem(kIcmpSourceQuench, "Source Quench");
- typeCombo->addItem(kIcmpRedirect, "Redirect");
- typeCombo->addItem(kIcmpEchoRequest, "Echo Request");
- typeCombo->addItem(kIcmpTimeExceeded, "Time Exceeded");
- typeCombo->addItem(kIcmpParameterProblem, "Parameter Problem");
- typeCombo->addItem(kIcmpTimestampRequest, "Timestamp Request");
- typeCombo->addItem(kIcmpTimestampReply, "Timestamp Reply");
- typeCombo->addItem(kIcmpInformationRequest, "Information Request");
- typeCombo->addItem(kIcmpInformationReply, "Information Reply");
- typeCombo->addItem(kIcmpAddressMaskRequest, "Address Mask Request");
- typeCombo->addItem(kIcmpAddressMaskReply, "Address Mask Reply");
- break;
-
- case OstProto::Icmp::kIcmp6:
- typeCombo->addItem(kIcmp6DestinationUnreachable,
- "Destination Unreachable");
- typeCombo->addItem(kIcmp6PacketTooBig, "Packet Too Big");
- typeCombo->addItem(kIcmp6TimeExceeded, "Time Exceeded");
- typeCombo->addItem(kIcmp6ParameterProblem, "Parameter Problem");
-
- typeCombo->addItem(kIcmp6EchoRequest, "Echo Request");
- typeCombo->addItem(kIcmp6EchoReply, "Echo Reply");
- typeCombo->addItem(kIcmp6RouterSolicitation, "Router Solicitation");
- typeCombo->addItem(kIcmp6RouterAdvertisement, "Router Advertisement");
- typeCombo->addItem(kIcmp6NeighbourSolicitation,
- "Neighbour Solicitation");
- typeCombo->addItem(kIcmp6NeighbourAdvertisement,
- "Neighbour Advertisement");
- typeCombo->addItem(kIcmp6Redirect, "Redirect");
- typeCombo->addItem(kIcmp6InformationQuery, "Information Query");
- typeCombo->addItem(kIcmp6InformationResponse, "Information Response");
- break;
- default:
- Q_ASSERT(false);
- }
-
- typeCombo->setValue(value);
-}
+#include "icmphelper.h"
IcmpProtocol::IcmpProtocol(StreamBase *stream, AbstractProtocol *parent)
: AbstractProtocol(stream, parent)
{
- configForm = NULL;
}
IcmpProtocol::~IcmpProtocol()
{
- delete configForm;
}
AbstractProtocol* IcmpProtocol::createInstance(StreamBase *stream,
@@ -541,54 +392,5 @@ _exit:
return isOk;
}
-QWidget* IcmpProtocol::configWidget()
-{
- if (configForm == NULL)
- {
- configForm = new IcmpConfigForm;
- loadConfigWidget();
- }
- return configForm;
-}
-
-void IcmpProtocol::loadConfigWidget()
-{
- configWidget();
-
- configForm->versionGroup->button(icmpVersion())->click();
-
- configForm->typeCombo->setValue(fieldData(icmp_type, FieldValue).toUInt());
- configForm->codeEdit->setText(fieldData(icmp_code, FieldValue).toString());
-
- configForm->overrideCksum->setChecked(
- fieldData(icmp_is_override_checksum, FieldValue).toBool());
- configForm->cksumEdit->setText(uintToHexStr(
- fieldData(icmp_checksum, FieldValue).toUInt(), 2));
-
- configForm->idEdit->setText(
- fieldData(icmp_identifier, FieldValue).toString());
- configForm->seqEdit->setText(
- fieldData(icmp_sequence, FieldValue).toString());
-
-}
-
-void IcmpProtocol::storeConfigWidget()
-{
- bool isOk;
-
- configWidget();
-
- setFieldData(icmp_version, configForm->versionGroup->checkedId());
-
- setFieldData(icmp_type, configForm->typeCombo->currentValue());
- setFieldData(icmp_code, configForm->codeEdit->text());
-
- setFieldData(icmp_is_override_checksum,
- configForm->overrideCksum->isChecked());
- setFieldData(icmp_checksum, configForm->cksumEdit->text().toUInt(&isOk, BASE_HEX));
-
- setFieldData(icmp_identifier, configForm->idEdit->text());
- setFieldData(icmp_sequence, configForm->seqEdit->text());
-}
diff --git a/common/icmp.h b/common/icmp.h
index a3fc296..b24f025 100644
--- a/common/icmp.h
+++ b/common/icmp.h
@@ -20,12 +20,8 @@ along with this program. If not, see
#ifndef _ICMP_H
#define _ICMP_H
-#include "icmp.pb.h"
-#include "ui_icmp.h"
-
#include "abstractprotocol.h"
-
-#include
+#include "icmp.pb.h"
/*
Icmp Protocol Frame Format -
@@ -37,23 +33,9 @@ Fields within [] are applicable only to certain TYPEs
Figures in braces represent field width in bytes
*/
-class IcmpConfigForm : public QWidget, public Ui::Icmp
-{
- Q_OBJECT
-public:
- QButtonGroup *versionGroup;
-
- IcmpConfigForm(QWidget *parent = 0);
-private slots:
- void on_typeCombo_currentIndexChanged(int index);
- void when_versionGroup_buttonClicked(int id);
-};
-
class IcmpProtocol : public AbstractProtocol
{
-private:
- OstProto::Icmp data;
- IcmpConfigForm *configForm;
+public:
enum icmpfield
{
// Frame Fields
@@ -73,18 +55,6 @@ private:
icmp_fieldCount
};
- OstProto::Icmp::Version icmpVersion() const
- {
- return OstProto::Icmp::Version(
- fieldData(icmp_version, FieldValue).toUInt());
- }
-
- int icmpType() const
- {
- return fieldData(icmp_type, FieldValue).toInt();
- }
-
-public:
IcmpProtocol(StreamBase *stream, AbstractProtocol *parent = 0);
virtual ~IcmpProtocol();
@@ -109,9 +79,18 @@ public:
virtual bool setFieldData(int index, const QVariant &value,
FieldAttrib attrib = FieldValue);
- virtual QWidget* configWidget();
- virtual void loadConfigWidget();
- virtual void storeConfigWidget();
+private:
+ OstProto::Icmp data;
+
+ OstProto::Icmp::Version icmpVersion() const
+ {
+ return OstProto::Icmp::Version(
+ fieldData(icmp_version, FieldValue).toUInt());
+ }
+ int icmpType() const
+ {
+ return fieldData(icmp_type, FieldValue).toInt();
+ }
};
#endif
diff --git a/common/icmpconfig.cpp b/common/icmpconfig.cpp
new file mode 100644
index 0000000..2bf65af
--- /dev/null
+++ b/common/icmpconfig.cpp
@@ -0,0 +1,191 @@
+/*
+Copyright (C) 2010 Srivats P.
+
+This file is part of "Ostinato"
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 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.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+#include "icmpconfig.h"
+
+#include "icmp.h"
+#include "icmphelper.h"
+
+#include
+
+IcmpConfigForm::IcmpConfigForm(QWidget *parent)
+ : AbstractProtocolConfigForm(parent)
+{
+ versionGroup = new QButtonGroup(this);
+ setupUi(this);
+
+ // auto-connect's not working, for some reason I can't figure out!
+ // slot name changed to when_ instead of on_ so that connectSlotsByName()
+ // doesn't complain
+ connect(versionGroup,
+ SIGNAL(buttonClicked(int)),
+ SLOT(when_versionGroup_buttonClicked(int)));
+
+ versionGroup->addButton(icmp4Button, OstProto::Icmp::kIcmp4);
+ versionGroup->addButton(icmp6Button, OstProto::Icmp::kIcmp6);
+
+ typeCombo->setValidator(new QIntValidator(0, 0xFF, this));
+
+ icmp4Button->click();
+
+ idEdit->setValidator(new QIntValidator(0, 0xFFFF, this));
+ seqEdit->setValidator(new QIntValidator(0, 0xFFFF, this));
+}
+
+IcmpConfigForm::~IcmpConfigForm()
+{
+}
+
+IcmpConfigForm* IcmpConfigForm::createInstance()
+{
+ return new IcmpConfigForm;
+}
+
+void IcmpConfigForm::loadWidget(AbstractProtocol *proto)
+{
+ versionGroup->button(
+ proto->fieldData(
+ IcmpProtocol::icmp_version,
+ AbstractProtocol::FieldValue
+ ).toUInt())->click();
+
+ typeCombo->setValue(
+ proto->fieldData(
+ IcmpProtocol::icmp_type,
+ AbstractProtocol::FieldValue
+ ).toUInt());
+ codeEdit->setText(
+ proto->fieldData(
+ IcmpProtocol::icmp_code,
+ AbstractProtocol::FieldValue
+ ).toString());
+
+ overrideCksum->setChecked(
+ proto->fieldData(
+ IcmpProtocol::icmp_is_override_checksum,
+ AbstractProtocol::FieldValue
+ ).toBool());
+ cksumEdit->setText(uintToHexStr(
+ proto->fieldData(
+ IcmpProtocol::icmp_checksum,
+ AbstractProtocol::FieldValue
+ ).toUInt(), 2));
+
+ idEdit->setText(
+ proto->fieldData(
+ IcmpProtocol::icmp_identifier,
+ AbstractProtocol::FieldValue
+ ).toString());
+ seqEdit->setText(
+ proto->fieldData(
+ IcmpProtocol::icmp_sequence,
+ AbstractProtocol::FieldValue
+ ).toString());
+}
+
+void IcmpConfigForm::storeWidget(AbstractProtocol *proto)
+{
+ proto->setFieldData(
+ IcmpProtocol::icmp_version,
+ versionGroup->checkedId());
+
+ proto->setFieldData(
+ IcmpProtocol::icmp_type,
+ typeCombo->currentValue());
+ proto->setFieldData(
+ IcmpProtocol::icmp_code,
+ codeEdit->text());
+
+ proto->setFieldData(
+ IcmpProtocol::icmp_is_override_checksum,
+ overrideCksum->isChecked());
+ proto->setFieldData(
+ IcmpProtocol::icmp_checksum,
+ hexStrToUInt(cksumEdit->text()));
+
+ proto->setFieldData(
+ IcmpProtocol::icmp_identifier,
+ idEdit->text());
+ proto->setFieldData(
+ IcmpProtocol::icmp_sequence,
+ seqEdit->text());
+}
+
+//
+// -------- private slots
+//
+void IcmpConfigForm::on_typeCombo_currentIndexChanged(int /*index*/)
+{
+ idSeqFrame->setVisible(
+ isIdSeqType(
+ OstProto::Icmp::Version(versionGroup->checkedId()),
+ typeCombo->currentValue()));
+}
+
+void IcmpConfigForm::when_versionGroup_buttonClicked(int id)
+{
+ int value = typeCombo->currentValue();
+
+ typeCombo->clear();
+
+ switch(id)
+ {
+ case OstProto::Icmp::kIcmp4:
+ typeCombo->addItem(kIcmpEchoReply, "Echo Reply");
+ typeCombo->addItem(kIcmpDestinationUnreachable,
+ "Destination Unreachable");
+ typeCombo->addItem(kIcmpSourceQuench, "Source Quench");
+ typeCombo->addItem(kIcmpRedirect, "Redirect");
+ typeCombo->addItem(kIcmpEchoRequest, "Echo Request");
+ typeCombo->addItem(kIcmpTimeExceeded, "Time Exceeded");
+ typeCombo->addItem(kIcmpParameterProblem, "Parameter Problem");
+ typeCombo->addItem(kIcmpTimestampRequest, "Timestamp Request");
+ typeCombo->addItem(kIcmpTimestampReply, "Timestamp Reply");
+ typeCombo->addItem(kIcmpInformationRequest, "Information Request");
+ typeCombo->addItem(kIcmpInformationReply, "Information Reply");
+ typeCombo->addItem(kIcmpAddressMaskRequest, "Address Mask Request");
+ typeCombo->addItem(kIcmpAddressMaskReply, "Address Mask Reply");
+ break;
+
+ case OstProto::Icmp::kIcmp6:
+ typeCombo->addItem(kIcmp6DestinationUnreachable,
+ "Destination Unreachable");
+ typeCombo->addItem(kIcmp6PacketTooBig, "Packet Too Big");
+ typeCombo->addItem(kIcmp6TimeExceeded, "Time Exceeded");
+ typeCombo->addItem(kIcmp6ParameterProblem, "Parameter Problem");
+
+ typeCombo->addItem(kIcmp6EchoRequest, "Echo Request");
+ typeCombo->addItem(kIcmp6EchoReply, "Echo Reply");
+ typeCombo->addItem(kIcmp6RouterSolicitation, "Router Solicitation");
+ typeCombo->addItem(kIcmp6RouterAdvertisement, "Router Advertisement");
+ typeCombo->addItem(kIcmp6NeighbourSolicitation,
+ "Neighbour Solicitation");
+ typeCombo->addItem(kIcmp6NeighbourAdvertisement,
+ "Neighbour Advertisement");
+ typeCombo->addItem(kIcmp6Redirect, "Redirect");
+ typeCombo->addItem(kIcmp6InformationQuery, "Information Query");
+ typeCombo->addItem(kIcmp6InformationResponse, "Information Response");
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+
+ typeCombo->setValue(value);
+}
+
diff --git a/common/icmpconfig.h b/common/icmpconfig.h
new file mode 100644
index 0000000..6e01065
--- /dev/null
+++ b/common/icmpconfig.h
@@ -0,0 +1,50 @@
+/*
+Copyright (C) 2010 Srivats P.
+
+This file is part of "Ostinato"
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 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.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+#ifndef _ICMP_CONFIG_H
+#define _ICMP_CONFIG_H
+
+#include "abstractprotocolconfig.h"
+#include "ui_icmp.h"
+
+class QButtonGroup;
+
+class IcmpConfigForm :
+ public AbstractProtocolConfigForm,
+ private Ui::Icmp
+{
+ Q_OBJECT
+public:
+ IcmpConfigForm(QWidget *parent = 0);
+ virtual ~IcmpConfigForm();
+
+ static IcmpConfigForm* createInstance();
+
+ virtual void loadWidget(AbstractProtocol *proto);
+ virtual void storeWidget(AbstractProtocol *proto);
+
+private:
+ QButtonGroup *versionGroup;
+
+private slots:
+ void on_typeCombo_currentIndexChanged(int index);
+ void when_versionGroup_buttonClicked(int id);
+};
+
+#endif
diff --git a/common/icmphelper.h b/common/icmphelper.h
new file mode 100644
index 0000000..0c5bcf7
--- /dev/null
+++ b/common/icmphelper.h
@@ -0,0 +1,88 @@
+/*
+Copyright (C) 2010 Srivats P.
+
+This file is part of "Ostinato"
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 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.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+#ifndef _ICMP_HELPER_H
+#define _ICMP_HELPER_H
+
+#include "icmp.pb.h"
+
+#include
+
+enum IcmpType
+{
+ kIcmpEchoReply = 0,
+ kIcmpDestinationUnreachable = 3,
+ kIcmpSourceQuench = 4,
+ kIcmpRedirect = 5,
+ kIcmpEchoRequest = 8,
+ kIcmpTimeExceeded = 11,
+ kIcmpParameterProblem = 12,
+ kIcmpTimestampRequest = 13,
+ kIcmpTimestampReply = 14,
+ kIcmpInformationRequest = 15,
+ kIcmpInformationReply = 16,
+ kIcmpAddressMaskRequest = 17,
+ kIcmpAddressMaskReply = 18
+};
+
+enum Icmp6Type
+{
+ kIcmp6DestinationUnreachable = 1,
+ kIcmp6PacketTooBig = 2,
+ kIcmp6TimeExceeded = 3,
+ kIcmp6ParameterProblem = 4,
+ kIcmp6EchoRequest = 128,
+ kIcmp6EchoReply = 129,
+ kIcmp6RouterSolicitation = 133,
+ kIcmp6RouterAdvertisement = 134,
+ kIcmp6NeighbourSolicitation = 135,
+ kIcmp6NeighbourAdvertisement = 136,
+ kIcmp6Redirect = 137,
+ kIcmp6InformationQuery = 139,
+ kIcmp6InformationResponse = 140
+};
+
+static QSet icmpIdSeqSet = QSet()
+ << kIcmpEchoRequest
+ << kIcmpEchoReply
+ << kIcmpInformationRequest
+ << kIcmpInformationReply;
+
+static QSet icmp6IdSeqSet = QSet()
+ << kIcmp6EchoRequest
+ << kIcmp6EchoReply;
+
+bool inline isIdSeqType(OstProto::Icmp::Version ver, int type)
+{
+ //qDebug("%s: ver = %d, type = %d", __FUNCTION__, ver, type);
+ switch(ver)
+ {
+ case OstProto::Icmp::kIcmp4:
+ return icmpIdSeqSet.contains(type);
+ case OstProto::Icmp::kIcmp6:
+ return icmp6IdSeqSet.contains(type);
+ default:
+ break;
+ }
+
+ Q_ASSERT(false); // unreachable
+ return false;
+}
+
+#endif
diff --git a/common/ostproto.pro b/common/ostproto.pro
index 40a5b1d..2dbe0c1 100644
--- a/common/ostproto.pro
+++ b/common/ostproto.pro
@@ -64,13 +64,13 @@ HEADERS += \
ip6over4.h \
ip6over6.h \
gmp.h \
+ icmp.h \
igmp.h \
mld.h \
tcp.h \
udp.h
HEADERS1 += \
- icmp.h \
textproto.h \
userscript.h \
hexdump.h \
@@ -97,13 +97,13 @@ SOURCES += \
ip4.cpp \
ip6.cpp \
gmp.cpp \
+ icmp.cpp \
igmp.cpp \
mld.cpp \
tcp.cpp \
udp.cpp
SOURCES1 += \
- icmp.cpp \
textproto.cpp \
userscript.cpp \
hexdump.cpp \
diff --git a/common/ostprotogui.pro b/common/ostprotogui.pro
index 443ed02..e8a6909 100644
--- a/common/ostprotogui.pro
+++ b/common/ostprotogui.pro
@@ -19,11 +19,11 @@ FORMS += \
ip4.ui \
ip6.ui \
gmp.ui \
+ icmp.ui \
tcp.ui \
udp.ui
FORMS1 += \
- icmp.ui \
textproto.ui \
userscript.ui \
hexdump.ui \
@@ -65,6 +65,7 @@ HEADERS += \
ip6config.h \
ip4over4config.h \
gmpconfig.h \
+ icmpconfig.h \
igmpconfig.h \
mldconfig.h \
tcpconfig.h \
@@ -93,6 +94,7 @@ SOURCES += \
ip4config.cpp \
ip6config.cpp \
gmpconfig.cpp \
+ icmpconfig.cpp \
igmpconfig.cpp \
mldconfig.cpp \
tcpconfig.cpp \
diff --git a/common/protocolmanager.cpp b/common/protocolmanager.cpp
index 302cc96..db1a4ca 100644
--- a/common/protocolmanager.cpp
+++ b/common/protocolmanager.cpp
@@ -22,7 +22,6 @@ along with this program. If not, see
#include "protocol.pb.h"
#if 0
-#include "icmp.h"
#include "textproto.h"
#include "userscript.h"
#include "hexdump.h"
@@ -48,6 +47,7 @@ along with this program. If not, see
#include "ip6over4.h"
#include "ip6over6.h"
// L4 Protos
+#include "icmp.h"
#include "igmp.h"
#include "mld.h"
#include "tcp.h"
@@ -62,8 +62,6 @@ ProtocolManager::ProtocolManager()
themselves (once this is done remove the #includes for all the protocols)
*/
#if 0
- registerProtocol(OstProto::Protocol::kIcmpFieldNumber,
- (void*) IcmpProtocol::createInstance);
registerProtocol(OstProto::Protocol::kTextProtocolFieldNumber,
(void*) TextProtocol::createInstance);
@@ -118,6 +116,8 @@ ProtocolManager::ProtocolManager()
(void*) Ip6over6Protocol::createInstance);
// Layer 4 Protocols
+ registerProtocol(OstProto::Protocol::kIcmpFieldNumber,
+ (void*) IcmpProtocol::createInstance);
registerProtocol(OstProto::Protocol::kIgmpFieldNumber,
(void*) IgmpProtocol::createInstance);
registerProtocol(OstProto::Protocol::kMldFieldNumber,
diff --git a/common/protocolwidgetfactory.cpp b/common/protocolwidgetfactory.cpp
index 06ac075..78347ad 100644
--- a/common/protocolwidgetfactory.cpp
+++ b/common/protocolwidgetfactory.cpp
@@ -39,6 +39,7 @@ along with this program. If not, see
#include "ip6over4config.h"
#include "ip6over6config.h"
// L4 Protocol Widgets
+#include "icmpconfig.h"
#include "igmpconfig.h"
#include "mldconfig.h"
#include "tcpconfig.h"
@@ -114,6 +115,9 @@ ProtocolWidgetFactory::ProtocolWidgetFactory()
(void*) Ip6over6ConfigForm::createInstance);
// Layer 4 Protocols
+ OstProtocolWidgetFactory->registerProtocolConfigWidget(
+ OstProto::Protocol::kIcmpFieldNumber,
+ (void*) IcmpConfigForm::createInstance);
OstProtocolWidgetFactory->registerProtocolConfigWidget(
OstProto::Protocol::kIgmpFieldNumber,
(void*) IgmpConfigForm::createInstance);