sr_pwospf.c
sr_pwospf.c — C source code, 2 KB (2791 bytes)
File contents
/*----------------------------------------------------------------------------- * file: sr_pwospf.c * date: Tue Nov 23 23:24:18 PST 2004 * Author: Martin Casado * * Description: * *---------------------------------------------------------------------------*/ #include "sr_pwospf.h" #include "sr_router.h" #include <stdio.h> #include <unistd.h> #include <assert.h> #include <malloc.h> /* -- declaration of main thread function for pwospf subsystem --- */ static void* pwospf_run_thread(void* arg); /*--------------------------------------------------------------------- * Method: pwospf_init(..) * * Sets up the internal data structures for the pwospf subsystem * * You may assume that the interfaces have been created and initialized * by this point. *---------------------------------------------------------------------*/ int pwospf_init(struct sr_instance* sr) { assert(sr); sr->ospf_subsys = (struct pwospf_subsys*)malloc(sizeof(struct pwospf_subsys)); assert(sr->ospf_subsys); pthread_mutex_init(&(sr->ospf_subsys->lock), 0); /* -- handle subsystem initialization here! -- */ /* -- start thread subsystem -- */ if( pthread_create(&sr->ospf_subsys->thread, 0, pwospf_run_thread, sr)) { perror("pthread_create"); assert(0); } return 0; /* success */ } /* -- pwospf_init -- */ /*--------------------------------------------------------------------- * Method: pwospf_lock * * Lock mutex associated with pwospf_subsys * *---------------------------------------------------------------------*/ void pwospf_lock(struct pwospf_subsys* subsys) { if ( pthread_mutex_lock(&subsys->lock) ) { assert(0); } } /* -- pwospf_subsys -- */ /*--------------------------------------------------------------------- * Method: pwospf_unlock * * Unlock mutex associated with pwospf subsystem * *---------------------------------------------------------------------*/ void pwospf_unlock(struct pwospf_subsys* subsys) { if ( pthread_mutex_unlock(&subsys->lock) ) { assert(0); } } /* -- pwospf_subsys -- */ /*--------------------------------------------------------------------- * Method: pwospf_run_thread * * Main thread of pwospf subsystem. * *---------------------------------------------------------------------*/ static void* pwospf_run_thread(void* arg) { struct sr_instance* sr = (struct sr_instance*)arg; while(1) { /* -- PWOSPF subsystem functionality should start here! -- */ pwospf_lock(sr->ospf_subsys); printf(" pwospf subsystem sleeping \n"); pwospf_unlock(sr->ospf_subsys); sleep(2); printf(" pwospf subsystem awake \n"); }; } /* -- run_ospf_thread -- */