Lines Matching refs:drv
40 struct macsec_drv_data *drv; member
143 static int init_genl_ctx(struct macsec_drv_data *drv) in init_genl_ctx() argument
145 struct macsec_genl_ctx *ctx = &drv->ctx; in init_genl_ctx()
166 ctx->cb_arg.drv = drv; in init_genl_ctx()
180 static int try_commit(struct macsec_drv_data *drv) in try_commit() argument
184 if (!drv->sk) in try_commit()
187 if (!drv->link) in try_commit()
190 if (drv->controlled_port_enabled_set) { in try_commit()
195 drv->ifname, drv->controlled_port_enabled); in try_commit()
199 rtnl_link_set_name(change, drv->ifname); in try_commit()
201 if (drv->controlled_port_enabled) in try_commit()
206 err = rtnl_link_change(drv->sk, change, change, 0); in try_commit()
212 drv->controlled_port_enabled_set = false; in try_commit()
215 if (drv->protect_frames_set) { in try_commit()
218 drv->ifname, drv->protect_frames); in try_commit()
219 rtnl_link_macsec_set_protect(drv->link, drv->protect_frames); in try_commit()
222 if (drv->encrypt_set) { in try_commit()
224 drv->ifname, drv->encrypt); in try_commit()
225 rtnl_link_macsec_set_encrypt(drv->link, drv->encrypt); in try_commit()
228 if (drv->replay_protect_set) { in try_commit()
231 drv->ifname, drv->replay_protect, in try_commit()
232 drv->replay_window); in try_commit()
233 rtnl_link_macsec_set_replay_protect(drv->link, in try_commit()
234 drv->replay_protect); in try_commit()
235 if (drv->replay_protect) in try_commit()
236 rtnl_link_macsec_set_window(drv->link, in try_commit()
237 drv->replay_window); in try_commit()
241 if (drv->offload_set) { in try_commit()
244 drv->ifname, drv->offload); in try_commit()
245 rtnl_link_macsec_set_offload(drv->link, drv->offload); in try_commit()
249 if (drv->encoding_sa_set) { in try_commit()
252 drv->ifname, drv->encoding_sa); in try_commit()
253 rtnl_link_macsec_set_encoding_sa(drv->link, drv->encoding_sa); in try_commit()
256 err = rtnl_link_add(drv->sk, drv->link, 0); in try_commit()
260 drv->protect_frames_set = false; in try_commit()
261 drv->encrypt_set = false; in try_commit()
262 drv->replay_protect_set = false; in try_commit()
270 struct macsec_drv_data *drv = priv; in macsec_drv_wpa_deinit() local
272 driver_wired_deinit_common(&drv->common); in macsec_drv_wpa_deinit()
273 os_free(drv); in macsec_drv_wpa_deinit()
310 struct macsec_drv_data *drv; in macsec_drv_wpa_init() local
315 drv = os_zalloc(sizeof(*drv)); in macsec_drv_wpa_init()
316 if (!drv) in macsec_drv_wpa_init()
319 if (driver_wired_init_common(&drv->common, ifname, ctx) < 0) { in macsec_drv_wpa_init()
320 os_free(drv); in macsec_drv_wpa_init()
324 return drv; in macsec_drv_wpa_init()
330 struct macsec_drv_data *drv = priv; in macsec_drv_macsec_init() local
335 drv->sk = nl_socket_alloc(); in macsec_drv_macsec_init()
336 if (!drv->sk) in macsec_drv_macsec_init()
339 err = nl_connect(drv->sk, NETLINK_ROUTE); in macsec_drv_macsec_init()
347 err = rtnl_link_alloc_cache(drv->sk, AF_UNSPEC, &drv->link_cache); in macsec_drv_macsec_init()
354 drv->parent_ifi = rtnl_link_name2i(drv->link_cache, drv->common.ifname); in macsec_drv_macsec_init()
355 if (drv->parent_ifi == 0) { in macsec_drv_macsec_init()
358 drv->common.ifname); in macsec_drv_macsec_init()
362 drv->common.ifname, drv->parent_ifi); in macsec_drv_macsec_init()
364 err = init_genl_ctx(drv); in macsec_drv_macsec_init()
371 nl_cache_free(drv->link_cache); in macsec_drv_macsec_init()
372 drv->link_cache = NULL; in macsec_drv_macsec_init()
374 nl_socket_free(drv->sk); in macsec_drv_macsec_init()
375 drv->sk = NULL; in macsec_drv_macsec_init()
382 struct macsec_drv_data *drv = priv; in macsec_drv_macsec_deinit() local
386 if (drv->sk) in macsec_drv_macsec_deinit()
387 nl_socket_free(drv->sk); in macsec_drv_macsec_deinit()
388 drv->sk = NULL; in macsec_drv_macsec_deinit()
390 if (drv->link_cache) in macsec_drv_macsec_deinit()
391 nl_cache_free(drv->link_cache); in macsec_drv_macsec_deinit()
392 drv->link_cache = NULL; in macsec_drv_macsec_deinit()
394 if (drv->ctx.sk) in macsec_drv_macsec_deinit()
395 nl_socket_free(drv->ctx.sk); in macsec_drv_macsec_deinit()
420 struct macsec_drv_data *drv = priv; in macsec_drv_enable_protect_frames() local
424 drv->protect_frames_set = true; in macsec_drv_enable_protect_frames()
425 drv->protect_frames = enabled; in macsec_drv_enable_protect_frames()
427 return try_commit(drv); in macsec_drv_enable_protect_frames()
440 struct macsec_drv_data *drv = priv; in macsec_drv_enable_encrypt() local
444 drv->encrypt_set = true; in macsec_drv_enable_encrypt()
445 drv->encrypt = enabled; in macsec_drv_enable_encrypt()
447 return try_commit(drv); in macsec_drv_enable_encrypt()
462 struct macsec_drv_data *drv = priv; in macsec_drv_set_replay_protect() local
467 drv->replay_protect_set = true; in macsec_drv_set_replay_protect()
468 drv->replay_protect = enabled; in macsec_drv_set_replay_protect()
470 drv->replay_window = window; in macsec_drv_set_replay_protect()
472 return try_commit(drv); in macsec_drv_set_replay_protect()
487 struct macsec_drv_data *drv = priv; in macsec_drv_set_offload() local
491 drv->offload_set = true; in macsec_drv_set_offload()
492 drv->offload = offload; in macsec_drv_set_offload()
494 return try_commit(drv); in macsec_drv_set_offload()
514 struct macsec_drv_data *drv = priv; in macsec_drv_set_current_cipher_suite() local
518 drv->cipher_suite_set = true; in macsec_drv_set_current_cipher_suite()
519 drv->cipher_suite = cs; in macsec_drv_set_current_cipher_suite()
521 return try_commit(drv); in macsec_drv_set_current_cipher_suite()
534 struct macsec_drv_data *drv = priv; in macsec_drv_enable_controlled_port() local
538 drv->controlled_port_enabled = enabled; in macsec_drv_enable_controlled_port()
539 drv->controlled_port_enabled_set = true; in macsec_drv_enable_controlled_port()
541 return try_commit(drv); in macsec_drv_enable_controlled_port()
573 if (ret_hdr->nlmsg_type != arg->drv->ctx.macsec_genl_id) in dump_callback()
687 static int do_dump(struct macsec_drv_data *drv, u8 txsa, u64 rxsci, u8 rxsa, in do_dump() argument
690 struct macsec_genl_ctx *ctx = &drv->ctx; in do_dump()
694 ctx->cb_arg.ifindex = drv->ifi; in do_dump()
736 struct macsec_drv_data *drv = priv; in macsec_drv_get_receive_lowest_pn() local
741 err = do_dump(drv, 0xff, mka_sci_u64(&sa->sc->sci), sa->an, in macsec_drv_get_receive_lowest_pn()
758 struct macsec_drv_data *drv = priv; in macsec_drv_set_receive_lowest_pn() local
759 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_set_receive_lowest_pn()
766 drv->ifname, sa->an, sa->next_pn); in macsec_drv_set_receive_lowest_pn()
768 msg = msg_prepare(MACSEC_CMD_UPD_RXSA, ctx, drv->ifi); in macsec_drv_set_receive_lowest_pn()
805 struct macsec_drv_data *drv = priv; in macsec_drv_get_transmit_next_pn() local
810 err = do_dump(drv, sa->an, UNUSED_SCI, 0xff, &sa->next_pn); in macsec_drv_get_transmit_next_pn()
825 struct macsec_drv_data *drv = priv; in macsec_drv_set_transmit_next_pn() local
826 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_set_transmit_next_pn()
833 msg = msg_prepare(MACSEC_CMD_UPD_TXSA, ctx, drv->ifi); in macsec_drv_set_transmit_next_pn()
877 struct macsec_drv_data *drv = priv; in macsec_drv_create_receive_sc() local
878 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_create_receive_sc()
884 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port), in macsec_drv_create_receive_sc()
887 msg = msg_prepare(MACSEC_CMD_ADD_RXSC, ctx, drv->ifi); in macsec_drv_create_receive_sc()
915 struct macsec_drv_data *drv = priv; in macsec_drv_delete_receive_sc() local
916 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_delete_receive_sc()
921 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port)); in macsec_drv_delete_receive_sc()
923 msg = msg_prepare(MACSEC_CMD_DEL_RXSC, ctx, drv->ifi); in macsec_drv_delete_receive_sc()
951 struct macsec_drv_data *drv = priv; in macsec_drv_create_receive_sa() local
952 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_create_receive_sa()
960 drv->ifname, sa->an, in macsec_drv_create_receive_sa()
969 msg = msg_prepare(MACSEC_CMD_ADD_RXSA, ctx, drv->ifi); in macsec_drv_create_receive_sa()
1010 struct macsec_drv_data *drv = priv; in macsec_drv_delete_receive_sa() local
1011 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_delete_receive_sa()
1017 SCISTR, drv->ifname, sa->an, in macsec_drv_delete_receive_sa()
1020 msg = msg_prepare(MACSEC_CMD_DEL_RXSA, ctx, drv->ifi); in macsec_drv_delete_receive_sa()
1091 struct macsec_drv_data *drv = priv; in macsec_drv_enable_receive_sa() local
1092 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_enable_receive_sa()
1095 SCISTR, drv->ifname, sa->an, in macsec_drv_enable_receive_sa()
1098 return set_active_rx_sa(ctx, drv->ifi, mka_sci_u64(&sa->sc->sci), in macsec_drv_enable_receive_sa()
1111 struct macsec_drv_data *drv = priv; in macsec_drv_disable_receive_sa() local
1112 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_disable_receive_sa()
1115 SCISTR, drv->ifname, sa->an, in macsec_drv_disable_receive_sa()
1118 return set_active_rx_sa(ctx, drv->ifi, mka_sci_u64(&sa->sc->sci), in macsec_drv_disable_receive_sa()
1156 struct macsec_drv_data *drv = priv; in macsec_drv_create_transmit_sc() local
1165 drv->common.ifname, SCI2STR(sc->sci.addr, sc->sci.port), in macsec_drv_create_transmit_sc()
1168 if (!drv->sk) { in macsec_drv_create_transmit_sc()
1179 rtnl_link_set_link(link, drv->parent_ifi); in macsec_drv_create_transmit_sc()
1184 drv->created_link = true; in macsec_drv_create_transmit_sc()
1186 if (drv->cipher_suite_set) { in macsec_drv_create_transmit_sc()
1187 cs = drv->cipher_suite; in macsec_drv_create_transmit_sc()
1188 drv->cipher_suite_set = false; in macsec_drv_create_transmit_sc()
1192 err = rtnl_link_add(drv->sk, link, NLM_F_CREATE); in macsec_drv_create_transmit_sc()
1196 drv->created_link = false; in macsec_drv_create_transmit_sc()
1206 nl_cache_refill(drv->sk, drv->link_cache); in macsec_drv_create_transmit_sc()
1207 link = lookup_sc(drv->link_cache, drv->parent_ifi, sci, cs); in macsec_drv_create_transmit_sc()
1213 drv->ifi = rtnl_link_get_ifindex(link); in macsec_drv_create_transmit_sc()
1217 drv->common.ifname, drv->ifi, ifname); in macsec_drv_create_transmit_sc()
1218 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname)); in macsec_drv_create_transmit_sc()
1221 drv->link = rtnl_link_macsec_alloc(); in macsec_drv_create_transmit_sc()
1222 if (!drv->link) { in macsec_drv_create_transmit_sc()
1227 rtnl_link_set_name(drv->link, drv->ifname); in macsec_drv_create_transmit_sc()
1231 return try_commit(drv); in macsec_drv_create_transmit_sc()
1243 struct macsec_drv_data *drv = priv; in macsec_drv_delete_transmit_sc() local
1247 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port)); in macsec_drv_delete_transmit_sc()
1249 if (!drv->sk) in macsec_drv_delete_transmit_sc()
1252 if (!drv->created_link) { in macsec_drv_delete_transmit_sc()
1253 rtnl_link_put(drv->link); in macsec_drv_delete_transmit_sc()
1254 drv->link = NULL; in macsec_drv_delete_transmit_sc()
1260 err = rtnl_link_delete(drv->sk, drv->link); in macsec_drv_delete_transmit_sc()
1263 rtnl_link_put(drv->link); in macsec_drv_delete_transmit_sc()
1264 drv->link = NULL; in macsec_drv_delete_transmit_sc()
1278 struct macsec_drv_data *drv = priv; in macsec_drv_create_transmit_sa() local
1279 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_create_transmit_sa()
1286 drv->ifname, sa->an, in macsec_drv_create_transmit_sa()
1295 msg = msg_prepare(MACSEC_CMD_ADD_TXSA, ctx, drv->ifi); in macsec_drv_create_transmit_sa()
1333 struct macsec_drv_data *drv = priv; in macsec_drv_delete_transmit_sa() local
1334 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_delete_transmit_sa()
1340 SCISTR, drv->ifname, sa->an, in macsec_drv_delete_transmit_sa()
1343 msg = msg_prepare(MACSEC_CMD_DEL_TXSA, ctx, drv->ifi); in macsec_drv_delete_transmit_sa()
1409 struct macsec_drv_data *drv = priv; in macsec_drv_enable_transmit_sa() local
1410 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_enable_transmit_sa()
1414 SCISTR, drv->ifname, sa->an, in macsec_drv_enable_transmit_sa()
1417 ret = set_active_tx_sa(ctx, drv->ifi, sa->an, true); in macsec_drv_enable_transmit_sa()
1423 drv->encoding_sa_set = true; in macsec_drv_enable_transmit_sa()
1424 drv->encoding_sa = sa->an; in macsec_drv_enable_transmit_sa()
1426 return try_commit(drv); in macsec_drv_enable_transmit_sa()
1438 struct macsec_drv_data *drv = priv; in macsec_drv_disable_transmit_sa() local
1439 struct macsec_genl_ctx *ctx = &drv->ctx; in macsec_drv_disable_transmit_sa()
1442 SCISTR, drv->ifname, sa->an, in macsec_drv_disable_transmit_sa()
1445 return set_active_tx_sa(ctx, drv->ifi, sa->an, false); in macsec_drv_disable_transmit_sa()
1451 struct macsec_drv_data *drv = priv; in macsec_drv_status() local
1463 drv->common.ifname, drv->ifi, in macsec_drv_status()
1464 drv->ifname, drv->parent_ifi); in macsec_drv_status()
1533 static int macsec_drv_init_sockets(struct macsec_drv_data *drv, u8 *own_addr) in macsec_drv_init_sockets() argument
1539 drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE)); in macsec_drv_init_sockets()
1540 if (drv->common.sock < 0) { in macsec_drv_init_sockets()
1546 if (eloop_register_read_sock(drv->common.sock, macsec_drv_handle_read, in macsec_drv_init_sockets()
1547 drv->common.ctx, NULL)) { in macsec_drv_init_sockets()
1553 os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name)); in macsec_drv_init_sockets()
1554 if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) { in macsec_drv_init_sockets()
1566 if (bind(drv->common.sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) in macsec_drv_init_sockets()
1573 if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex, in macsec_drv_init_sockets()
1581 os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name)); in macsec_drv_init_sockets()
1582 if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) { in macsec_drv_init_sockets()
1605 struct macsec_drv_data *drv; in macsec_drv_hapd_init() local
1607 drv = os_zalloc(sizeof(struct macsec_drv_data)); in macsec_drv_hapd_init()
1608 if (drv == NULL) { in macsec_drv_hapd_init()
1614 drv->common.ctx = hapd; in macsec_drv_hapd_init()
1615 os_strlcpy(drv->common.ifname, params->ifname, in macsec_drv_hapd_init()
1616 sizeof(drv->common.ifname)); in macsec_drv_hapd_init()
1617 drv->use_pae_group_addr = params->use_pae_group_addr; in macsec_drv_hapd_init()
1619 if (macsec_drv_init_sockets(drv, params->own_addr)) { in macsec_drv_hapd_init()
1620 os_free(drv); in macsec_drv_hapd_init()
1624 return drv; in macsec_drv_hapd_init()
1630 struct macsec_drv_data *drv = priv; in macsec_drv_hapd_deinit() local
1632 if (drv->common.sock >= 0) { in macsec_drv_hapd_deinit()
1633 eloop_unregister_read_sock(drv->common.sock); in macsec_drv_hapd_deinit()
1634 close(drv->common.sock); in macsec_drv_hapd_deinit()
1637 os_free(drv); in macsec_drv_hapd_deinit()
1645 struct macsec_drv_data *drv = priv; in macsec_drv_send_eapol() local
1660 os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr, in macsec_drv_send_eapol()
1668 res = send(drv->common.sock, (u8 *) hdr, len, 0); in macsec_drv_send_eapol()