ccmni.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*****************************************************************************
  2. *
  3. * Filename:
  4. * ---------
  5. * ccmni.c
  6. *
  7. * Project:
  8. * --------
  9. *
  10. *
  11. * Description:
  12. * ------------
  13. *
  14. * Author:
  15. * -------
  16. *
  17. *
  18. ****************************************************************************/
  19. #include <ccci.h>
  20. void *ccmni_ctl_block[MAX_MD_NUM];
  21. static char mac_addr_table[MAX_MD_NUM * 5][ETH_ALEN];
  22. static int mac_addr_num;
  23. int is_mac_addr_duplicate(char *mac)
  24. {
  25. int i = 0, j;
  26. int found = 0;
  27. for (i = 0; i < mac_addr_num; i++) {
  28. if (strcmp(mac, mac_addr_table[i]) == 0) {
  29. found = 1;
  30. return !0;
  31. }
  32. }
  33. if (!found) {
  34. for (j = 0; j < ETH_ALEN; j++)
  35. mac_addr_table[i][j] = mac[j];
  36. mac_addr_num++;
  37. if (mac_addr_num >= (MAX_MD_NUM * 5))
  38. mac_addr_num--;
  39. }
  40. return 0;
  41. }
  42. int ccmni_init(int md_id)
  43. {
  44. int ccmni_version = 0;
  45. if (ccci_get_sub_module_cfg
  46. (md_id, "net", (char *)&ccmni_version,
  47. sizeof(int)) != sizeof(int)) {
  48. CCCI_MSG_INF(md_id, "net", "[Error]get ccmni version fail\n");
  49. return -1;
  50. }
  51. CCCI_MSG_INF(md_id, "net", "ccmni driver v%d\n", ccmni_version);
  52. switch (ccmni_version) {
  53. case 1:
  54. return ccmni_v1_init(md_id);
  55. case 2:
  56. return ccmni_v2_init(md_id);
  57. default:
  58. CCCI_MSG_INF(md_id, "net", "[Error]invalid CCMNI version: %d\n",
  59. ccmni_version);
  60. return -1;
  61. }
  62. }
  63. void ccmni_exit(int md_id)
  64. {
  65. int ccmni_version = 0;
  66. if (ccci_get_sub_module_cfg
  67. (md_id, "net", (char *)&ccmni_version,
  68. sizeof(int)) != sizeof(int)) {
  69. CCCI_MSG_INF(md_id, "net", "get ccmni version fail\n");
  70. return;
  71. }
  72. switch (ccmni_version) {
  73. case 1:
  74. return ccmni_v1_exit(md_id);
  75. case 2:
  76. return ccmni_v2_exit(md_id);
  77. default:
  78. CCCI_MSG_INF(md_id, "net", "[Error]invalid CCMNI version: %d\n",
  79. ccmni_version);
  80. return;
  81. }
  82. }
  83. int ccmni_ipo_h_restore(int md_id)
  84. {
  85. int ccmni_version = 0;
  86. if (ccci_get_sub_module_cfg
  87. (md_id, "net", (char *)&ccmni_version,
  88. sizeof(int)) != sizeof(int)) {
  89. CCCI_MSG("Get ccmni verion fail\n");
  90. return -1;
  91. }
  92. switch (ccmni_version) {
  93. case 1:
  94. return ccmni_v1_ipo_h_restore(md_id);
  95. case 2:
  96. return ccmni_v2_ipo_h_restore(md_id);
  97. default:
  98. CCCI_MSG("[Error]CCMNI not support version\n");
  99. return -1;
  100. }
  101. }