2626/* NOTE: function from ctrl/pppoe plugin! */
2727void pppoe_get_session_mac_and_sid (struct ap_session * ses , uint8_t * * mac , uint16_t * sid );
2828
29+ static void * pd_key ;
30+
31+ struct vpphook_private_data_t * vpphook_get_pd (struct ap_session * ses )
32+ {
33+ struct ap_private * pd ;
34+
35+ list_for_each_entry (pd , & ses -> pd_list , entry ) {
36+ if (pd -> key == & pd_key )
37+ return container_of (pd , struct vpphook_private_data_t , pd );
38+ }
39+
40+ return NULL ;
41+ }
42+
2943int vpphook_session_hook_init (struct ap_session * ses )
3044{
31- ses -> hooks_priv_data = _malloc (sizeof (struct vpphook_private_data_t ));
32- memset (ses -> hooks_priv_data , 0 , sizeof (struct vpphook_private_data_t ));
45+ struct vpphook_private_data_t * pd = _malloc (sizeof (struct vpphook_private_data_t ));
46+ if (pd == NULL )
47+ return -1 ;
48+
49+ memset (pd , 0 , sizeof (struct vpphook_private_data_t ));
50+ pd -> pd .key = & pd_key ;
3351
34- INIT_LIST_HEAD (& VPPHOOK_GET_PRIV ( ses ) -> vpp_routes );
52+ INIT_LIST_HEAD (& pd -> vpp_routes );
3553
36- return ses -> hooks_priv_data == NULL ? -1 : 0 ; /* return 0 is ok */
54+ list_add_tail (& pd -> pd .entry , & ses -> pd_list );
55+
56+ return 0 ; /* return 0 is ok */
3757}
3858
3959void vpphook_session_hook_deinit (struct ap_session * ses )
4060{
41- _free (ses -> hooks_priv_data );
42- ses -> hooks_priv_data = NULL ;
61+ struct vpphook_private_data_t * pd = vpphook_get_pd (ses );
62+ if (pd == NULL )
63+ return ;
64+
65+ list_del (& pd -> pd .entry );
66+ _free (pd );
4367}
4468
4569int vpphook_pppoe_create_vpp_session_interface (struct ap_session * ses )
@@ -56,7 +80,7 @@ int vpphook_pppoe_create_vpp_session_interface(struct ap_session *ses)
5680 return ret ;
5781 }
5882
59- VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index = ifindex ;
83+ vpphook_get_pd (ses )-> vpp_sw_if_index = ifindex ;
6084 vpppoe_dump_interface_name (ifindex , ses -> ifname , AP_IFNAME_LEN );
6185
6286 if (ses -> ipv4 ) {
@@ -92,73 +116,73 @@ int vpphook_pppoe_terminate(struct ap_session *ses, int hard)
92116
93117int vpphook_ipaddr_add (struct ap_session * ses , int ifindex , in_addr_t addr , int mask )
94118{
95- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
119+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
96120 /* setup route instead */
97121 return vpp_iproute_add_del (ses , 1 , sw_ifindex , 0 , addr , 0 , 0 , mask , 0 );
98122}
99123
100124int vpphook_ipaddr_add_peer (struct ap_session * ses , int ifindex , in_addr_t addr , in_addr_t peer_addr )
101125{
102- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
126+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
103127 /* setup route instead */
104128 return vpp_iproute_add_del (ses , 1 , sw_ifindex , 0 , peer_addr , 0 , 0 , 32 , 0 );
105129}
106130
107131int vpphook_ipaddr_del (struct ap_session * ses , int ifindex , in_addr_t addr , int mask )
108132{
109- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
133+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
110134 /* remove route instead */
111135 return vpp_iproute_add_del (ses , 0 , sw_ifindex , 0 , addr , 0 , 0 , mask , 0 );
112136}
113137
114138int vpphook_ipaddr_del_peer (struct ap_session * ses , int ifindex , in_addr_t addr , in_addr_t peer )
115139{
116- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
140+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
117141 /* remove route instead */
118142 return vpp_iproute_add_del (ses , 0 , sw_ifindex , 0 , peer , 0 , 0 , 32 , 0 );
119143}
120144
121145int vpphook_iproute_add (struct ap_session * ses , int ifindex , in_addr_t src , in_addr_t dst , in_addr_t gw , int proto , int mask , uint32_t prio , const char * vrf_name )
122146{
123- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
147+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
124148 return vpp_iproute_add_del (ses , 1 , sw_ifindex , src , dst , gw , proto , mask , prio );
125149}
126150
127151int vpphook_iproute_del (struct ap_session * ses , int ifindex , in_addr_t src , in_addr_t dst , in_addr_t gw , int proto , int mask , uint32_t prio , const char * vrf_name )
128152{
129- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
153+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
130154 return vpp_iproute_add_del (ses , 0 , sw_ifindex , src , dst , gw , proto , mask , prio );
131155}
132156
133157int vpphook_ip6route_add (struct ap_session * ses , int ifindex , const struct in6_addr * dst , int pref_len , const struct in6_addr * gw , int proto , uint32_t prio , const char * vrf_name )
134158{
135- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
159+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
136160 return vpp_ip6route_add_del (ses , 1 , sw_ifindex , dst , pref_len , gw , proto , prio );
137161}
138162
139163int vpphook_ip6route_del (struct ap_session * ses , int ifindex , const struct in6_addr * dst , int pref_len , const struct in6_addr * gw , int proto , uint32_t prio , const char * vrf_name )
140164{
141- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
165+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
142166 return vpp_ip6route_add_del (ses , 0 , sw_ifindex , dst , pref_len , gw , proto , prio );
143167}
144168
145169int vpphook_ip6addr_add (struct ap_session * ses , int ifindex , struct in6_addr * addr , int prefix_len )
146170{
147- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
171+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
148172 /* setup route instead */
149173 return vpp_ip6route_add_del (ses , 1 , sw_ifindex , addr , prefix_len , NULL , 0 , 0 );
150174}
151175
152176int vpphook_ip6addr_add_peer (struct ap_session * ses , int ifindex , struct in6_addr * addr , struct in6_addr * peer_addr )
153177{
154- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
178+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
155179 /* setup route instead */
156180 return vpp_ip6route_add_del (ses , 1 , sw_ifindex , peer_addr , 128 , NULL , 0 , 0 );
157181}
158182
159183int vpphook_ip6addr_del (struct ap_session * ses , int ifindex , struct in6_addr * addr , int prefix_len )
160184{
161- uint32_t sw_ifindex = VPPHOOK_GET_PRIV (ses )-> vpp_sw_if_index ;
185+ uint32_t sw_ifindex = vpphook_get_pd (ses )-> vpp_sw_if_index ;
162186 /* remove route instead */
163187 return vpp_ip6route_add_del (ses , 0 , sw_ifindex , addr , prefix_len , NULL , 0 , 0 );
164188}
0 commit comments