ipa_nat_map.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * Copyright (c) 2019 The Linux Foundation. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are
  6. * met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above
  10. * copyright notice, this list of conditions and the following
  11. * disclaimer in the documentation and/or other materials provided
  12. * with the distribution.
  13. * * Neither the name of The Linux Foundation nor the names of its
  14. * contributors may be used to endorse or promote products derived
  15. * from this software without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
  18. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
  20. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  21. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  22. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  23. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  24. * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  25. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  26. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  27. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. */
  29. #if !defined(_IPA_NATI_MAP_H_)
  30. # define _IPA_NATI_MAP_H_
  31. #include <stdint.h>
  32. # ifdef __cplusplus
  33. extern "C"
  34. {
  35. # endif /* __cplusplus */
  36. /* Used below */
  37. #define MAKE_AS_STR_CASE(v) case v: return #v
  38. /*
  39. * The following is used to describe which map to use.
  40. *
  41. * PLEASE KEEP THE FOLLOWING IN SYNC WITH ipa_which_map_as_str()
  42. * BELOW.
  43. */
  44. typedef enum
  45. {
  46. MAP_NUM_00 = 0,
  47. MAP_NUM_01 = 1,
  48. MAP_NUM_02 = 2,
  49. MAP_NUM_03 = 3,
  50. MAP_NUM_99 = 4,
  51. MAP_NUM_MAX
  52. } ipa_which_map;
  53. #define VALID_IPA_USE_MAP(w) \
  54. ( (w) >= MAP_NUM_00 || (w) < MAP_NUM_MAX )
  55. /* KEEP THE FOLLOWING IN SYNC WITH ABOVE. */
  56. static inline const char* ipa_which_map_as_str(
  57. ipa_which_map w )
  58. {
  59. switch ( w )
  60. {
  61. MAKE_AS_STR_CASE(MAP_NUM_00);
  62. MAKE_AS_STR_CASE(MAP_NUM_01);
  63. MAKE_AS_STR_CASE(MAP_NUM_02);
  64. MAKE_AS_STR_CASE(MAP_NUM_03);
  65. MAKE_AS_STR_CASE(MAP_NUM_99);
  66. default:
  67. break;
  68. }
  69. return "???";
  70. }
  71. int ipa_nat_map_add(
  72. ipa_which_map which,
  73. uint32_t key,
  74. uint32_t val );
  75. int ipa_nat_map_find(
  76. ipa_which_map which,
  77. uint32_t key,
  78. uint32_t* val_ptr );
  79. int ipa_nat_map_del(
  80. ipa_which_map which,
  81. uint32_t key,
  82. uint32_t* val_ptr );
  83. int ipa_nat_map_clear(
  84. ipa_which_map which );
  85. int ipa_nat_map_dump(
  86. ipa_which_map which );
  87. # ifdef __cplusplus
  88. }
  89. # endif /* __cplusplus */
  90. #endif /* #if !defined(_IPA_NATI_MAP_H_) */