| 317 | } |
| 318 | |
| 319 | static int |
| 320 | enc_add_hhooks(struct enc_softc *sc) |
| 321 | { |
| 322 | struct hookinfo hki; |
| 323 | int error; |
| 324 | |
| 325 | error = EPFNOSUPPORT; |
| 326 | hki.hook_func = enc_hhook; |
| 327 | hki.hook_helper = NULL; |
| 328 | hki.hook_udata = sc; |
| 329 | #ifdef INET |
| 330 | hki.hook_id = AF_INET; |
| 331 | hki.hook_type = HHOOK_TYPE_IPSEC_IN; |
| 332 | error = hhook_add_hook(V_ipsec_hhh_in[HHOOK_IPSEC_INET], |
| 333 | &hki, HHOOK_WAITOK); |
| 334 | if (error != 0) |
| 335 | return (error); |
| 336 | hki.hook_type = HHOOK_TYPE_IPSEC_OUT; |
| 337 | error = hhook_add_hook(V_ipsec_hhh_out[HHOOK_IPSEC_INET], |
| 338 | &hki, HHOOK_WAITOK); |
| 339 | if (error != 0) |
| 340 | return (error); |
| 341 | #endif |
| 342 | #ifdef INET6 |
| 343 | hki.hook_id = AF_INET6; |
| 344 | hki.hook_type = HHOOK_TYPE_IPSEC_IN; |
| 345 | error = hhook_add_hook(V_ipsec_hhh_in[HHOOK_IPSEC_INET6], |
| 346 | &hki, HHOOK_WAITOK); |
| 347 | if (error != 0) |
| 348 | return (error); |
| 349 | hki.hook_type = HHOOK_TYPE_IPSEC_OUT; |
| 350 | error = hhook_add_hook(V_ipsec_hhh_out[HHOOK_IPSEC_INET6], |
| 351 | &hki, HHOOK_WAITOK); |
| 352 | if (error != 0) |
| 353 | return (error); |
| 354 | #endif |
| 355 | return (error); |
| 356 | } |
| 357 | |
| 358 | static void |
| 359 | enc_remove_hhooks(struct enc_softc *sc) |
no test coverage detected