MMEPeek.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*====================================================================*
  2. *
  3. * Copyright (c) 2013 Qualcomm Atheros, Inc.
  4. *
  5. * All rights reserved.
  6. *
  7. *====================================================================*/
  8. /*====================================================================*
  9. *
  10. * void MMEPeek (void const * memory, size_t length, FILE *fp);
  11. *
  12. * mme.h
  13. *
  14. * print a HomePlug AV frame header on stdout in human readable
  15. * format;
  16. *
  17. *
  18. * Contributor(s):
  19. * Charles Maier <cmaier@qca.qualcomm.com>
  20. *
  21. *--------------------------------------------------------------------*/
  22. #ifndef MMPEEK_SOURCE
  23. #define MMPEEK_SOURCE
  24. #include <stdio.h>
  25. #include <stdint.h>
  26. #include "../tools/memory.h"
  27. #include "../mme/mme.h"
  28. #ifndef ETHER_ADDR_LEN
  29. #define ETHER_ADDR_LEN 6 /* normally defined in ethernet.h or if_ether.h */
  30. #endif
  31. void MMEPeek (void const * memory, size_t extent, FILE * fp)
  32. {
  33. char address [ETHER_ADDR_LEN * 3];
  34. struct message * message = (struct message *) (memory);
  35. fprintf (fp, "ODA=%s ", hexstring (address, sizeof (address), message->ethernet.ODA, sizeof (message->ethernet.ODA)));
  36. fprintf (fp, "OSA=%s ", hexstring (address, sizeof (address), message->ethernet.OSA, sizeof (message->ethernet.OSA)));
  37. fprintf (fp, "MTYPE=%04X ", ntohs (message->ethernet.MTYPE));
  38. if (ntohs (message->ethernet.MTYPE) == ETH_P_HPAV)
  39. {
  40. struct homeplug_hdr * homeplug = (struct homeplug_hdr *) (& message->content);
  41. uint16_t mmtype = LE16TOH (homeplug->MMTYPE);
  42. if (mmtype < MMTYPE_VS)
  43. {
  44. if (homeplug->MMV == 0x00)
  45. {
  46. struct homeplug_hdr * homeplug = (struct homeplug_hdr *) (& message->content);
  47. mmtype = LE16TOH (homeplug->MMTYPE);
  48. fprintf (fp, "MMV=%02X ", homeplug->MMV);
  49. fprintf (fp, "MMTYPE=%04X ", mmtype);
  50. fprintf (fp, "%s.%s\n", MMEName (mmtype), MMEMode (mmtype));
  51. return;
  52. }
  53. if (homeplug->MMV == 0x01)
  54. {
  55. struct homeplug_fmi * homeplug = (struct homeplug_fmi *) (& message->content);
  56. mmtype = LE16TOH (homeplug->MMTYPE);
  57. fprintf (fp, "MMV=%02X ", homeplug->MMV);
  58. fprintf (fp, "MMTYPE=%04X ", mmtype);
  59. fprintf (fp, "FMID=%02X ", homeplug->FMID);
  60. fprintf (fp, "FMSN=%02X ", homeplug->FMSN);
  61. fprintf (fp, "%s.%s\n", MMEName (mmtype), MMEMode (mmtype));
  62. return;
  63. }
  64. }
  65. if (mmtype < MMTYPE_XX)
  66. {
  67. if (homeplug->MMV == 0x00)
  68. {
  69. struct qualcomm_hdr * qualcomm = (struct qualcomm_hdr *) (& message->content);
  70. mmtype = LE16TOH (qualcomm->MMTYPE);
  71. fprintf (fp, "MMV=%02X ", qualcomm->MMV);
  72. fprintf (fp, "MMTYPE=%04X ", mmtype);
  73. fprintf (fp, "OUI=%s ", hexstring (address, sizeof (address), qualcomm->OUI, sizeof (qualcomm->OUI)));
  74. fprintf (fp, "%s.%s\n", MMEName (mmtype), MMEMode (mmtype));
  75. return;
  76. }
  77. if (homeplug->MMV == 0x01)
  78. {
  79. struct qualcomm_fmi * qualcomm = (struct qualcomm_fmi *) (& message->content);
  80. mmtype = LE16TOH (qualcomm->MMTYPE);
  81. fprintf (fp, "MMV=%02X ", qualcomm->MMV);
  82. fprintf (fp, "MMTYPE=%04X ", mmtype);
  83. fprintf (fp, "FMID=%02X ", qualcomm->FMID);
  84. fprintf (fp, "FMSN=%02X ", qualcomm->FMSN);
  85. fprintf (fp, "OUI=%s ", hexstring (address, sizeof (address), qualcomm->OUI, sizeof (qualcomm->OUI)));
  86. fprintf (fp, "%s.%s\n", MMEName (mmtype), MMEMode (mmtype));
  87. return;
  88. }
  89. }
  90. }
  91. fprintf (fp, "UNKNOWN_MESSAGE_TYPE\n");
  92. return;
  93. }
  94. #endif