garp.c

来自「garp code used in switch」· C语言 代码 · 共 105 行

C
105
字号

// ********************************************
// Name   : garp.c
// Note   : initiate gvrp/gmrp module
// ********************************************

#include "common.h"
#include "garp_common.h"

#ifdef __GVRP__
#include "gvrp_common.h"
Gvr 	 *my_gvr;
#endif

#ifdef __GMRP__
#include "gmrp_common.h"
Gmr 	 *my_gmr;
#endif

Tuint8	      ga_my_mac[MAC_ADDR_LEN];
extern struct nf_sockopt_ops garp_sockopts, gvrp_sockopts, gmrp_sockopts;

// Register GVRP/GMRP rx_handler & netfilter socket option 
static int __init garp_init(void)
{
#ifdef __GMRP__
  Tint8 gmrp_mac[MAC_ADDR_LEN]={0x01,0x80,0xc2,0x00,0x00,0x20};  
#endif
#ifdef __GVRP__
  Tint8 gvrp_mac[MAC_ADDR_LEN]={0x01,0x80,0xc2,0x00,0x00,0x21};
#endif
  Tint8 mask[MAC_ADDR_LEN]={0xff,0xff,0xff,0xff,0xff,0xff};

  // read switch's mac addr from register and change to network order
  K_SysGetMac(ga_my_mac);
  K_MacReverseMac(ga_my_mac); 

  if(nf_register_sockopt(&garp_sockopts)) {
    printk(" GARP: nf_register_sockopt...Fail \n");
    return (False);
  }

#ifdef __GVRP__
  if(nf_register_sockopt(&gvrp_sockopts)) {
    printk(" GVRP: nf_register_sockopt...Fail \n");
    return (False);
  }
  //Create one GVRP Application per box 
  if( gvr_create_gvr( GVRP_PROCESS_ID ,(void **)&my_gvr)!=True) {
      printk("GVRP: Creating GVRP Application Fail!\n");
      return (False);
  }
  // Register GVRP RX Handler  
  mx_register(gvrp_mac,mask,gvrp_pdu_rcv);
#endif


#ifdef __GMRP__
  if(nf_register_sockopt(&gmrp_sockopts)) {
    printk(" GMRP: nf_register_sockopt...Fail \n");
    return (False);
  }
  //Create one GMRP Application per box
  //We just support one vlan mode which means all multicast group must belong to default vlan 
  if( gmr_create_gmr( GMRP_PROCESS_ID, 1 /*default vid*/  , (void **)&my_gmr)!=True) {
      printk("GMRP: Creating GMRP Application Fail!\n");
      return (False);
  }
  // Register GMRP RX Handler 
  mx_register(gmrp_mac,mask,gmrp_pdu_rcv);
#endif

  return 0;

}

static void __exit garp_exit(void)
{
#ifdef __GVRP__
 Tint8 gvrp_mac[MAC_ADDR_LEN]={0x01,0x80,0xc2,0x00,0x00,0x21};
#endif
#ifdef __GMRP__
 Tint8 gmrp_mac[MAC_ADDR_LEN]={0x01,0x80,0xc2,0x00,0x00,0x20};  
#endif
 Tint8 mask[MAC_ADDR_LEN]={0xff,0xff,0xff,0xff,0xff,0xff};


 nf_unregister_sockopt(&garp_sockopts);

#ifdef __GVRP__
 printk("Leaving GVRP Protocol... \n");
 nf_unregister_sockopt(&gvrp_sockopts);
 mx_unregister(gvrp_mac,mask);
#endif

#ifdef __GMRP__
 printk("Leaving GMRP Protocol... \n");
 nf_unregister_sockopt(&gmrp_sockopts);
 mx_unregister(gmrp_mac,mask);
#endif
}

module_init(garp_init);
module_exit(garp_exit);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?