Publisher and Subscriber

This commit is contained in:
2024-03-10 17:15:47 +05:30
parent 60786b94e2
commit edb640b492
11 changed files with 687 additions and 30 deletions

128
rtm_publisher.c Normal file
View File

@@ -0,0 +1,128 @@
/*
* =====================================================================================
*
* Filename: rtm_publisher.c
*
* Description:
*
* Version: 1.0
* Created: 10/03/24 02:01:50 PM IST
* Revision: none
* Compiler: gcc
*
* Author: YOUR NAME (),
* Organization:
*
* =====================================================================================
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include "rt.h"
extern void
create_subscriber_thread(uint32_t client_id);
rt_table_t publisher_rt_table;
rt_table_t *
publisher_get_rt_table() {
return &publisher_rt_table;
}
void
main_menu() {
int choice;
while(1){
printf("Publisher Menu\n");
printf("1. Add/Update rt table entry\n");
printf("2. Delete rt table entry\n");
printf("3. Dump rt table\n");
printf("Enter Choice :");
choice = 0;
scanf("%d", &choice);
switch(choice){
case 1:
{
char dest[16];
char mask;
char oif[32];
char gw[16];
printf("Enter Destination :");
scanf("%s", dest);
printf("Mask : ");
scanf("%d", &mask);
printf("Enter oif name :");
scanf("%s", oif);
printf("Enter Gateway IP :");
scanf("%s", gw);
rt_add_or_update_rt_entry(publisher_get_rt_table(),
dest, mask, gw, oif);
}
break;
case 2:
/* Implement your self */
break;
case 3:
rt_dump_rt_table(publisher_get_rt_table());
break;
default: ;
}
}
}
void *
publisher_thread_fn(void *arg) {
/* Add some default entries in rt table */
rt_add_or_update_rt_entry(
publisher_get_rt_table(),
"122.1.1.1", 32, "10.1.1.1", "eth1");
rt_add_or_update_rt_entry(
publisher_get_rt_table(),
"122.1.1.2", 32, "10.1.1.2", "eth1");
rt_add_or_update_rt_entry(
publisher_get_rt_table(),
"122.1.1.3", 32, "10.1.1.3", "eth1");
rt_dump_rt_table(publisher_get_rt_table());
main_menu();
}
void
create_publisher_thread() {
pthread_attr_t attr;
pthread_t pub_thread;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pub_thread, &attr,
publisher_thread_fn,
(void *)0);
}
int
main(int argc, char **argv) {
rt_init_rt_table(&publisher_rt_table);
/* Create Subscriber threads */
create_subscriber_thread(1);
sleep(1);
create_subscriber_thread(2);
sleep(1);
create_subscriber_thread(3);
sleep(1);
/* Create publisher thread*/
create_publisher_thread();
printf("Publisher thread created\n");
pthread_exit(0);
return 0;
}