22 bool* isAlreadyJoined)
30 *isAlreadyJoined =
true;
36 *isAlreadyJoined =
false;
48 bool isAlreadyJoined =
false;
81 for (i = 0; i <
DEVICE(d)->nNumOfInterface; i++)
95 for (i = 0; i < db->
count; i++)
96 if (db->
ifids[i] == ifid)
105 for (i = 0; i < db->
count; i++)
106 if (db->
ifids[i] != ifid)
124 for (i = 0; i < db->
count; i++)
170 print_igmp_log(
"\nRouter %d, Time 0.0: Joining multicast group %s.",
209 print_igmp_log(
"\nRouter %d, Time %0.0lf: Query received for group address %s.",
218 print_igmp_log(
"Received from lower ip address %s. Changing state to NonQuerier",
250 print_igmp_log(
"\nRouter %d, Time %0.0lf: Other querier present timer expire for group address %s. Starting as querier.",
263 print_igmp_log(
"\nRouter %d, Time %0.0lf: Query is already received for group address %s. Continuing as Non querier.",
278 print_igmp_log(
"\nRouter %d, Time %0.0lf: Report received for group address %s.",
289 print_igmp_log(
"Router %d, Time %0.0lf: Starting group membership timer for group addr %s",
321 print_igmp_log(
"\nRouter %d, Time %0.0lf: Group membership timer expires for group addr %s. Deleting from database.",
330 print_igmp_log(
"\nRouter %d, Time %0.0lf: Refreshing Group membership timer for group addr %s.",
void igmp_start_timer(NETSIM_ID d, IP_SUBEVENT sev, NETSIM_IPAddress addr, double time)
void print_igmp_log(char *format,...)
#define IGMP_ROUTER_DB_ALLOC()
#define IGMP_ROUTER_DB_ADD(d, db)
#define isBroadcastInterface(d, i)
#define GET_IGMP_ROUTER(d)
#define IGMP_STARTUP_DELAY
struct stru_router_database * ptrIGMP_ROUTER_DB
#define SET_IGMP_ROUTER(d, var)
void send_query_msg(NETSIM_ID d, NETSIM_IPAddress group, double time)
bool router_process_report(NetSim_PACKET *packet, ptrIGMP_MSG msg, NETSIM_ID d)
static void router_delete_multicast_db(NETSIM_ID d, ptrIGMP_ROUTER_DB db)
ptrIGMP_ROUTER_DB find_or_alloc_multicast_db_router(NETSIM_IPAddress addr, NETSIM_ID d, bool *isAlreadyJoined)
static bool isInterfacePresentInDatabase(ptrIGMP_ROUTER_DB db, NETSIM_ID ifid)
ptrIGMP_ROUTER_DB router_get_multicast_db(NETSIM_ID d, NETSIM_IPAddress ip)
IP_PROTOCOL_ACTION router_is_ip_present_in_db(NETSIM_ID d, NETSIM_IPAddress ip, NetSim_PACKET *packet)
bool router_process_query(NetSim_PACKET *packet, ptrIGMP_MSG msg, NETSIM_ID d)
void router_free(NETSIM_ID d)
void igmp_router_processOtherQuerierPresentTime()
void igmp_router_init(NETSIM_ID d)
static void router_add_ip_route(ptrIGMP_ROUTER_DB db, NETSIM_ID d, NETSIM_ID ifid)
static bool isOtherInterfacePresentInDatabase(ptrIGMP_ROUTER_DB db, NETSIM_ID ifid)
void igmp_router_ProcessGroupMembershipTimer()
static ptrIGMP_ROUTER_DB router_join_multicast_group(NETSIM_ID d, NETSIM_IPAddress group)
static bool isBroadcastInterfacePresent(NETSIM_ID d)
void pim_join_group(NETSIM_ID d, NETSIM_IPAddress group)
ptrIP_ROUTINGTABLE iptable_add(ptrIP_WRAPPER wrapper, NETSIM_IPAddress dest, NETSIM_IPAddress subnet, unsigned int prefix_len, NETSIM_IPAddress gateway, UINT interfaceCount, NETSIM_IPAddress *interfaceIp, NETSIM_ID *interfaceId, unsigned int metric, char *type)
@ EVENT_IGMP_OtherQuerierPresentTimer
@ EVENT_IGMP_GroupMembershipTimer
int iptable_change(ptrIP_WRAPPER wrapper, NETSIM_IPAddress dest, NETSIM_IPAddress subnet, UINT prefix_len, NETSIM_IPAddress gateway, UINT interfaceCount, NETSIM_IPAddress *interfaceIp, NETSIM_ID *interfaceId, unsigned int metric)
NETSIM_IPAddress IP_COPY(NETSIM_IPAddress ip)
#define IP_COMPARE(ip1, ip2)
#define STR_TO_IP4(ipstr)
#define LIST_FREE(ls, mem)
#define DEVICE_NWADDRESS(DeviceId, InterfaceId)
bool isIPForSameDevice(NETSIM_IPAddress ip, NETSIM_ID d)
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
NETSIM_IPAddress get_ip_from_same_subnet(NETSIM_ID d, NETSIM_IPAddress ip)
#define IP_WRAPPER_GET(DeviceId)
#define fnpAddEvent(pstruEvent)
NETSIM_IPAddress szSourceIP
struct stru_NetSim_Packet_NetworkLayer * pstruNetworkData
NETSIM_IPAddress GroupAddress
ptrIGMP_ROUTER_DB database
double GroupMembershipInterval
UINT QueryPresentInterval
UINT StartupQueryInterval
char str_ip[_NETSIM_IP_LEN]
double otherQuerierPresentTime
bool isGroupMembershipTimerStarted
bool isOtherquerierTimerStarted