NetSim Source Code Help
Loading...
Searching...
No Matches
PIM_Msg.c
Go to the documentation of this file.
1/************************************************************************************
2* Copyright (C) 2020 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* Author: Shashi Kant Suman *
12* *
13* ---------------------------------------------------------------------------------*/
14
15#include "main.h"
16#include "List.h"
17#include "IP.h"
18#include "PIM_SM.h"
19#include "PIM_Msg.h"
20
22{
24}
25
26void set_PIM_MSG(NetSim_PACKET* packet, void* msg)
27{
29}
30
31static int pimtype_to_ctrltype(PIMMSG type, char* stype)
32{
33 switch (type)
34 {
35 case PIMMSG_Assert:
36 strcpy(stype, "PIMMSG_Asset");
37 return PACKET_PIM_ASSERT;
38
40 strcpy(stype, "PIMMSG_Bootstrap");
42
44 strcpy(stype, "PIMMSG_CandidateRPAdvertisement");
46
47 case PIMMSG_Graft:
48 strcpy(stype, "PIMMSG_Graft");
49 return PACKET_PIM_GRAFT;
50
51 case PIMMSG_GraftAck:
52 strcpy(stype, "PIMMSG_GraftAck");
54
55 case PIMMSG_Hello:
56 strcpy(stype, "PIMMSG_Hello");
57 return PACKET_PIM_HELLO;
58
60 strcpy(stype, "PIMMSG_JoinPrune");
62
63 case PIMMSG_Register:
64 strcpy(stype, "PIMMSG_Register");
66
68 strcpy(stype, "PIMMSG_RegisterStop");
70
71 default:
72 fnNetSimError("Unknown pim msg type %d\n", type);
73 return 0;
74 }
75}
76
77static double get_pim_size(PIMMSG type)
78{
79 switch (type)
80 {
81 case PIMMSG_Hello:
85 default:
86 fnNetSimError("Unknown PIM MSG %d in %s", type, __FUNCTION__);
87 return 0;
88 }
89}
90
92 void* opt,
93 double time,
94 NETSIM_ID source,
95 NETSIM_IPAddress sourceAddrss,
96 UINT destCount,
97 NETSIM_ID* destList,
99 UINT ttl)
100{
102 set_PIM_MSG(packet, opt);
103 packet->nControlDataType = pimtype_to_ctrltype(type, packet->szPacketType);
104
105 packet->dEventTime = time;
107 packet->nSourceId = source;
108 packet->pstruNetworkData->dArrivalTime = time;
109 packet->pstruNetworkData->dEndTime = time;
110 packet->pstruNetworkData->dOverhead = get_pim_size(type);
112 packet->pstruNetworkData->dPayload;
113 packet->pstruNetworkData->dStartTime = time;
116 packet->pstruNetworkData->nTTL = ttl;
118 packet->pstruNetworkData->szSourceIP = sourceAddrss;
119 UINT i;
120 for (i = 0; i < destCount; i++)
121 add_dest_to_packet(packet, destList[i]);
122 return packet;
123}
124
125void send_pim_msg(NETSIM_ID d, double time, NetSim_PACKET* packet)
126{
127 NetSim_EVENTDETAILS pevent;
128 memset(&pevent, 0, sizeof pevent);
129 pevent.dEventTime = time;
130 pevent.dPacketSize = packet->pstruNetworkData->dPacketSize;
131 if (packet->pstruAppData)
132 {
134 pevent.nSegmentId = packet->pstruAppData->nSegmentId;
135 }
136 pevent.nDeviceId = d;
137 pevent.nDeviceType = DEVICE_TYPE(d);
139 pevent.nPacketId = packet->nPacketId;
141 pevent.pPacket = packet;
142 fnpAddEvent(&pevent);
143}
144
146{
147 hdr->PIM_Ver = PIM_VER;
148 hdr->Type = type;
149}
150
152{
153 ptrENCODED_UNICAST_ADDR addr = calloc(1, sizeof* addr);
154 addr->addrFamily = ip->IP.IPV4.byte1;
155 addr->encodingType = 1; //IPv4
156 addr->unicastAddr = ip;
157 return addr;
158}
159
161{
162 char* bin = subnet->bin_ip;
163 UINT8 ret = 0;
164 while (*bin && *bin != 0)
165 {
166 bin++;
167 ret++;
168 }
169 return ret;
170}
171
173{
174 ptrENCODED_SOURCE_ADDR addr = calloc(1, sizeof* addr);
175 addr->addrFamily = ip->IP.IPV4.byte1;
176 addr->encodingType = 1; //IPv4
177 addr->SourceAddr = ip;
178 addr->maskLen = get_masklen(subnet);
179 return addr;
180}
181
183{
184 ptrENCODED_GROUP_ADDR addr = calloc(1, sizeof* addr);
185 addr->addrFamily = ip->IP.IPV4.byte1;
186 addr->EncodingType = 1;
187 addr->GroupMulticastAddr = ip;
188 addr->MaskLen = 32;
189 return addr;
190}
unsigned int NETSIM_ID
Definition: Animation.h:45
GROUP_MOBILITY * group
Definition: GroupMobility.c:30
@ PACKET_PIM_REGISTER
Definition: IP.h:79
@ PACKET_PIM_REGISTERSTOP
Definition: IP.h:80
@ PACKET_PIM_JOINPRUNE
Definition: IP.h:81
@ PACKET_PIM_GRAFTACK
Definition: IP.h:85
@ PACKET_PIM_GRAFT
Definition: IP.h:84
@ PACKET_PIM_CANDRPADVER
Definition: IP.h:86
@ PACKET_PIM_BOOTSTRAP
Definition: IP.h:82
@ PACKET_PIM_ASSERT
Definition: IP.h:83
@ PACKET_PIM_HELLO
Definition: IP.h:78
#define UINT
Definition: Linux.h:38
#define fnNetSimError(x,...)
Definition: Linux.h:56
#define UINT8
Definition: Linux.h:31
#define calloc(c, s)
Definition: Memory.h:29
static double get_pim_size(PIMMSG type)
Definition: PIM_Msg.c:77
static int pimtype_to_ctrltype(PIMMSG type, char *stype)
Definition: PIM_Msg.c:31
void set_PIM_MSG(NetSim_PACKET *packet, void *msg)
Definition: PIM_Msg.c:26
void set_pim_hdr(ptrPIM_HDR hdr, PIMMSG type)
Definition: PIM_Msg.c:145
NetSim_PACKET * create_pim_packet(PIMMSG type, void *opt, double time, NETSIM_ID source, NETSIM_IPAddress sourceAddrss, UINT destCount, NETSIM_ID *destList, NETSIM_IPAddress group, UINT ttl)
Definition: PIM_Msg.c:91
ptrENCODED_GROUP_ADDR encode_group_addr(NETSIM_IPAddress ip)
Definition: PIM_Msg.c:182
ptrENCODED_SOURCE_ADDR encode_source_addr(NETSIM_IPAddress ip, NETSIM_IPAddress subnet)
Definition: PIM_Msg.c:172
void * get_PIM_MSG(NetSim_PACKET *packet)
Definition: PIM_Msg.c:21
void send_pim_msg(NETSIM_ID d, double time, NetSim_PACKET *packet)
Definition: PIM_Msg.c:125
static UINT8 get_masklen(NETSIM_IPAddress subnet)
Definition: PIM_Msg.c:160
ptrENCODED_UNICAST_ADDR encode_unicast_addr(NETSIM_IPAddress ip)
Definition: PIM_Msg.c:151
#define PIM_VER
Definition: PIM_Msg.h:68
#define PIM_JP_MSG_LEN
Definition: PIM_Msg.h:409
#define PIM_HDR_LEN
Definition: PIM_Msg.h:69
#define PIM_HELLO_LEN
Definition: PIM_Msg.h:278
@ PIMMSG_JoinPrune
Definition: PIM_Msg.h:44
@ PIMMSG_Register
Definition: PIM_Msg.h:42
@ PIMMSG_CandidateRPAdvertisement
Definition: PIM_Msg.h:49
@ PIMMSG_Assert
Definition: PIM_Msg.h:46
@ PIMMSG_GraftAck
Definition: PIM_Msg.h:48
@ PIMMSG_Graft
Definition: PIM_Msg.h:47
@ PIMMSG_Bootstrap
Definition: PIM_Msg.h:45
@ PIMMSG_RegisterStop
Definition: PIM_Msg.h:43
@ PIMMSG_Hello
Definition: PIM_Msg.h:41
enum enum_pim_msg_type PIMMSG
@ PacketType_Control
Definition: Packet.h:66
@ IPPROTOCOL_PIM
Definition: Packet.h:133
void add_dest_to_packet(NetSim_PACKET *packet, NETSIM_ID dest)
#define DEVICE_TYPE(DeviceId)
Definition: Stack.h:773
@ NW_PROTOCOL_IPV4
Definition: Stack.h:189
@ NETWORK_OUT_EVENT
Definition: Stack.h:108
@ NETWORK_LAYER
Definition: Stack.h:96
#define fn_NetSim_Packet_CreatePacket(layer)
Definition: main.h:186
#define fnpAddEvent(pstruEvent)
Definition: main.h:191
NETSIM_ID nApplicationId
Definition: Stack.h:752
EVENT_TYPE nEventType
Definition: Stack.h:747
NETSIM_ID nProtocolId
Definition: Stack.h:748
struct stru_NetSim_Packet * pPacket
Definition: Stack.h:754
NETSIM_ID nDeviceId
Definition: Stack.h:750
long long int nPacketId
Definition: Stack.h:755
netsimDEVICE_TYPE nDeviceType
Definition: Stack.h:749
IP_PROTOCOL_NUMBER IPProtocol
Definition: Packet.h:203
NETWORK_LAYER_PROTOCOL nNetworkProtocol
Definition: Packet.h:204
NETSIM_IPAddress szDestIP
Definition: Packet.h:199
NETSIM_IPAddress szSourceIP
Definition: Packet.h:198
long long int nPacketId
Definition: Packet.h:256
struct stru_NetSim_Packet_AppLayer * pstruAppData
Definition: Packet.h:273
char szPacketType[MAX_PACKET_TYPE_LEN]
Definition: Packet.h:271
struct stru_NetSim_Packet_NetworkLayer * pstruNetworkData
Definition: Packet.h:275
double dEventTime
Definition: Packet.h:262
unsigned int nControlDataType
Definition: Packet.h:258
PACKET_TYPE nPacketType
Definition: Packet.h:257
NETSIM_ID nSourceId
Definition: Packet.h:263
char bin_ip[130]
Definition: IP_Addressing.h:55
struct stru_ip::@5::ipv4 IPV4
union stru_ip::@5 IP
NETSIM_IPAddress GroupMulticastAddr
Definition: PIM_Msg.h:111
NETSIM_IPAddress SourceAddr
Definition: PIM_Msg.h:137
NETSIM_IPAddress unicastAddr
Definition: PIM_Msg.h:86
UINT PIM_Ver
Definition: PIM_Msg.h:63
PIMMSG Type
Definition: PIM_Msg.h:64