|
|
|
|
@ -139,84 +139,74 @@ end:
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestHeaderTooSmall(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
|
|
|
|
/* A packet that is too small to have a complete MPLS header. */
|
|
|
|
|
uint8_t pkt[] = {
|
|
|
|
|
0x00, 0x00, 0x11
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
if (unlikely(p == NULL)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
memset(&dtv, 0, sizeof(DecodeThreadVars));
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt, sizeof(pkt));
|
|
|
|
|
FAIL_IF(!ENGINE_ISSET_EVENT(p, MPLS_HEADER_TOO_SMALL));
|
|
|
|
|
|
|
|
|
|
if (!ENGINE_ISSET_EVENT(p, MPLS_HEADER_TOO_SMALL)) {
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(p);
|
|
|
|
|
return ret;
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestPacketTooSmall(void)
|
|
|
|
|
{
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
memset(&dtv, 0, sizeof(DecodeThreadVars));
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
Packet *p0 = SCCalloc(1, SIZE_OF_PACKET);
|
|
|
|
|
memset(p0, 0, SIZE_OF_PACKET);
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
uint8_t pkt0[] = { 0x00, 0x01, 0x51, 0xff };
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p0, pkt0, sizeof(pkt0));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p0, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
SCFree(p0);
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt0, sizeof(pkt0));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
|
|
|
|
|
Packet *p1 = SCCalloc(1, SIZE_OF_PACKET);
|
|
|
|
|
FAIL_IF_NULL(p1);
|
|
|
|
|
p = PacketGetFromAlloc();
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
uint8_t pkt1[] = { 0x00, 0x01, 0x51, 0xff, 0x45 };
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p1, pkt1, sizeof(pkt1));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p1, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
SCFree(p1);
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt1, sizeof(pkt1));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
|
|
|
|
|
Packet *p2 = SCCalloc(1, SIZE_OF_PACKET);
|
|
|
|
|
FAIL_IF_NULL(p2);
|
|
|
|
|
p = PacketGetFromAlloc();
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
uint8_t pkt2[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01 };
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p2, pkt2, sizeof(pkt2));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p2, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
SCFree(p2);
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt2, sizeof(pkt2));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
|
|
|
|
|
Packet *p3 = SCCalloc(1, SIZE_OF_PACKET);
|
|
|
|
|
FAIL_IF_NULL(p3);
|
|
|
|
|
p = PacketGetFromAlloc();
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
uint8_t pkt3[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02 };
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p3, pkt3, sizeof(pkt3));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p3, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
SCFree(p3);
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt3, sizeof(pkt3));
|
|
|
|
|
FAIL_IF_NOT(ENGINE_ISSET_EVENT(p, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
|
|
|
|
|
// This should not create a too small event is it has one more byte
|
|
|
|
|
// than required.
|
|
|
|
|
Packet *p4 = SCCalloc(1, SIZE_OF_PACKET);
|
|
|
|
|
FAIL_IF_NULL(p4);
|
|
|
|
|
p = PacketGetFromAlloc();
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
uint8_t pkt4[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02, 0x03 };
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p4, pkt4, sizeof(pkt4));
|
|
|
|
|
FAIL_IF(ENGINE_ISSET_EVENT(p4, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
SCFree(p4);
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt4, sizeof(pkt4));
|
|
|
|
|
FAIL_IF(ENGINE_ISSET_EVENT(p, MPLS_PKT_TOO_SMALL));
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestBadLabelRouterAlert(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 1;
|
|
|
|
|
uint8_t pkt[] = {
|
|
|
|
|
0x00, 0x00, 0x11, 0xff, 0x45, 0x00, 0x00, 0x64,
|
|
|
|
|
0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
|
|
|
|
|
@ -234,9 +224,7 @@ static int DecodeMPLSTestBadLabelRouterAlert(void)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
if (unlikely(p == NULL)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
@ -244,18 +232,14 @@ static int DecodeMPLSTestBadLabelRouterAlert(void)
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt, sizeof(pkt));
|
|
|
|
|
FAIL_IF(!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_ROUTER_ALERT));
|
|
|
|
|
|
|
|
|
|
if (!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_ROUTER_ALERT)) {
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(p);
|
|
|
|
|
return ret;
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestBadLabelImplicitNull(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 1;
|
|
|
|
|
uint8_t pkt[] = {
|
|
|
|
|
0x00, 0x00, 0x31, 0xff, 0x45, 0x00, 0x00, 0x64,
|
|
|
|
|
0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
|
|
|
|
|
@ -273,28 +257,21 @@ static int DecodeMPLSTestBadLabelImplicitNull(void)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
if (unlikely(p == NULL)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
memset(&dtv, 0, sizeof(DecodeThreadVars));
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt, sizeof(pkt));
|
|
|
|
|
FAIL_IF(!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_IMPLICIT_NULL));
|
|
|
|
|
|
|
|
|
|
if (!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_IMPLICIT_NULL)) {
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(p);
|
|
|
|
|
return ret;
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestBadLabelReserved(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 1;
|
|
|
|
|
uint8_t pkt[] = {
|
|
|
|
|
0x00, 0x00, 0x51, 0xff, 0x45, 0x00, 0x00, 0x64,
|
|
|
|
|
0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
|
|
|
|
|
@ -312,29 +289,21 @@ static int DecodeMPLSTestBadLabelReserved(void)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
if (unlikely(p == NULL)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
memset(&dtv, 0, sizeof(DecodeThreadVars));
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt, sizeof(pkt));
|
|
|
|
|
FAIL_IF(!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_RESERVED));
|
|
|
|
|
|
|
|
|
|
if (!ENGINE_ISSET_EVENT(p, MPLS_BAD_LABEL_RESERVED)) {
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(p);
|
|
|
|
|
return ret;
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int DecodeMPLSTestUnknownPayloadType(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
|
|
|
|
/* Valid label: 21.
|
|
|
|
|
* Unknown payload type: 1.
|
|
|
|
|
*/
|
|
|
|
|
@ -355,23 +324,17 @@ static int DecodeMPLSTestUnknownPayloadType(void)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Packet *p = PacketGetFromAlloc();
|
|
|
|
|
if (unlikely(p == NULL)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
FAIL_IF_NULL(p);
|
|
|
|
|
ThreadVars tv;
|
|
|
|
|
DecodeThreadVars dtv;
|
|
|
|
|
|
|
|
|
|
memset(&dtv, 0, sizeof(DecodeThreadVars));
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
DecodeMPLS(&tv, &dtv, p, pkt, sizeof(pkt));
|
|
|
|
|
FAIL_IF(!ENGINE_ISSET_EVENT(p, MPLS_UNKNOWN_PAYLOAD_TYPE));
|
|
|
|
|
|
|
|
|
|
if (!ENGINE_ISSET_EVENT(p, MPLS_UNKNOWN_PAYLOAD_TYPE)) {
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(p);
|
|
|
|
|
return ret;
|
|
|
|
|
PacketFree(p);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif /* UNITTESTS */
|
|
|
|
|
|