Lines Matching refs:drv

36 	struct macsec_drv_data *drv;
131 static int init_genl_ctx(struct macsec_drv_data *drv)
133 struct macsec_genl_ctx *ctx = &drv->ctx;
154 ctx->cb_arg.drv = drv;
168 static int try_commit(struct macsec_drv_data *drv)
172 if (!drv->sk)
175 if (!drv->link)
178 if (drv->controlled_port_enabled_set) {
183 drv->ifname, drv->controlled_port_enabled);
187 rtnl_link_set_name(change, drv->ifname);
189 if (drv->controlled_port_enabled)
194 err = rtnl_link_change(drv->sk, change, change, 0);
200 drv->controlled_port_enabled_set = false;
203 if (drv->protect_frames_set) {
206 drv->ifname, drv->protect_frames);
207 rtnl_link_macsec_set_protect(drv->link, drv->protect_frames);
210 if (drv->encrypt_set) {
212 drv->ifname, drv->encrypt);
213 rtnl_link_macsec_set_encrypt(drv->link, drv->encrypt);
216 if (drv->replay_protect_set) {
219 drv->ifname, drv->replay_protect,
220 drv->replay_window);
221 rtnl_link_macsec_set_replay_protect(drv->link,
222 drv->replay_protect);
223 if (drv->replay_protect)
224 rtnl_link_macsec_set_window(drv->link,
225 drv->replay_window);
228 if (drv->encoding_sa_set) {
231 drv->ifname, drv->encoding_sa);
232 rtnl_link_macsec_set_encoding_sa(drv->link, drv->encoding_sa);
235 err = rtnl_link_add(drv->sk, drv->link, 0);
239 drv->protect_frames_set = false;
240 drv->encrypt_set = false;
241 drv->replay_protect_set = false;
249 struct macsec_drv_data *drv = priv;
251 driver_wired_deinit_common(&drv->common);
252 os_free(drv);
289 struct macsec_drv_data *drv;
294 drv = os_zalloc(sizeof(*drv));
295 if (!drv)
298 if (driver_wired_init_common(&drv->common, ifname, ctx) < 0) {
299 os_free(drv);
303 return drv;
309 struct macsec_drv_data *drv = priv;
314 drv->sk = nl_socket_alloc();
315 if (!drv->sk)
318 err = nl_connect(drv->sk, NETLINK_ROUTE);
326 err = rtnl_link_alloc_cache(drv->sk, AF_UNSPEC, &drv->link_cache);
333 drv->parent_ifi = rtnl_link_name2i(drv->link_cache, drv->common.ifname);
334 if (drv->parent_ifi == 0) {
337 drv->common.ifname);
341 drv->common.ifname, drv->parent_ifi);
343 err = init_genl_ctx(drv);
350 nl_cache_free(drv->link_cache);
351 drv->link_cache = NULL;
353 nl_socket_free(drv->sk);
354 drv->sk = NULL;
361 struct macsec_drv_data *drv = priv;
365 if (drv->sk)
366 nl_socket_free(drv->sk);
367 drv->sk = NULL;
369 if (drv->link_cache)
370 nl_cache_free(drv->link_cache);
371 drv->link_cache = NULL;
373 if (drv->ctx.sk)
374 nl_socket_free(drv->ctx.sk);
399 struct macsec_drv_data *drv = priv;
403 drv->protect_frames_set = true;
404 drv->protect_frames = enabled;
406 return try_commit(drv);
419 struct macsec_drv_data *drv = priv;
423 drv->encrypt_set = true;
424 drv->encrypt = enabled;
426 return try_commit(drv);
441 struct macsec_drv_data *drv = priv;
446 drv->replay_protect_set = true;
447 drv->replay_protect = enabled;
449 drv->replay_window = window;
451 return try_commit(drv);
477 struct macsec_drv_data *drv = priv;
481 drv->controlled_port_enabled = enabled;
482 drv->controlled_port_enabled_set = true;
484 return try_commit(drv);
516 if (ret_hdr->nlmsg_type != arg->drv->ctx.macsec_genl_id)
630 static int do_dump(struct macsec_drv_data *drv, u8 txsa, u64 rxsci, u8 rxsa,
633 struct macsec_genl_ctx *ctx = &drv->ctx;
637 ctx->cb_arg.ifindex = drv->ifi;
679 struct macsec_drv_data *drv = priv;
684 err = do_dump(drv, 0xff, mka_sci_u64(&sa->sc->sci), sa->an,
701 struct macsec_drv_data *drv = priv;
702 struct macsec_genl_ctx *ctx = &drv->ctx;
709 drv->ifname, sa->an, sa->next_pn);
711 msg = msg_prepare(MACSEC_CMD_UPD_RXSA, ctx, drv->ifi);
748 struct macsec_drv_data *drv = priv;
753 err = do_dump(drv, sa->an, UNUSED_SCI, 0xff, &sa->next_pn);
768 struct macsec_drv_data *drv = priv;
769 struct macsec_genl_ctx *ctx = &drv->ctx;
776 msg = msg_prepare(MACSEC_CMD_UPD_TXSA, ctx, drv->ifi);
820 struct macsec_drv_data *drv = priv;
821 struct macsec_genl_ctx *ctx = &drv->ctx;
827 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port),
830 msg = msg_prepare(MACSEC_CMD_ADD_RXSC, ctx, drv->ifi);
858 struct macsec_drv_data *drv = priv;
859 struct macsec_genl_ctx *ctx = &drv->ctx;
864 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port));
866 msg = msg_prepare(MACSEC_CMD_DEL_RXSC, ctx, drv->ifi);
894 struct macsec_drv_data *drv = priv;
895 struct macsec_genl_ctx *ctx = &drv->ctx;
903 drv->ifname, sa->an,
912 msg = msg_prepare(MACSEC_CMD_ADD_RXSA, ctx, drv->ifi);
953 struct macsec_drv_data *drv = priv;
954 struct macsec_genl_ctx *ctx = &drv->ctx;
960 SCISTR, drv->ifname, sa->an,
963 msg = msg_prepare(MACSEC_CMD_DEL_RXSA, ctx, drv->ifi);
1034 struct macsec_drv_data *drv = priv;
1035 struct macsec_genl_ctx *ctx = &drv->ctx;
1038 SCISTR, drv->ifname, sa->an,
1041 return set_active_rx_sa(ctx, drv->ifi, mka_sci_u64(&sa->sc->sci),
1054 struct macsec_drv_data *drv = priv;
1055 struct macsec_genl_ctx *ctx = &drv->ctx;
1058 SCISTR, drv->ifname, sa->an,
1061 return set_active_rx_sa(ctx, drv->ifi, mka_sci_u64(&sa->sc->sci),
1096 struct macsec_drv_data *drv = priv;
1104 drv->common.ifname, SCI2STR(sc->sci.addr, sc->sci.port),
1107 if (!drv->sk) {
1118 rtnl_link_set_link(link, drv->parent_ifi);
1123 drv->created_link = true;
1125 err = rtnl_link_add(drv->sk, link, NLM_F_CREATE);
1129 drv->created_link = false;
1139 nl_cache_refill(drv->sk, drv->link_cache);
1140 link = lookup_sc(drv->link_cache, drv->parent_ifi, sci);
1146 drv->ifi = rtnl_link_get_ifindex(link);
1150 drv->common.ifname, drv->ifi, ifname);
1151 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
1154 drv->link = rtnl_link_macsec_alloc();
1155 if (!drv->link) {
1160 rtnl_link_set_name(drv->link, drv->ifname);
1164 return try_commit(drv);
1176 struct macsec_drv_data *drv = priv;
1180 drv->ifname, SCI2STR(sc->sci.addr, sc->sci.port));
1182 if (!drv->sk)
1185 if (!drv->created_link) {
1186 rtnl_link_put(drv->link);
1187 drv->link = NULL;
1193 err = rtnl_link_delete(drv->sk, drv->link);
1196 rtnl_link_put(drv->link);
1197 drv->link = NULL;
1211 struct macsec_drv_data *drv = priv;
1212 struct macsec_genl_ctx *ctx = &drv->ctx;
1219 drv->ifname, sa->an,
1228 msg = msg_prepare(MACSEC_CMD_ADD_TXSA, ctx, drv->ifi);
1266 struct macsec_drv_data *drv = priv;
1267 struct macsec_genl_ctx *ctx = &drv->ctx;
1273 SCISTR, drv->ifname, sa->an,
1276 msg = msg_prepare(MACSEC_CMD_DEL_TXSA, ctx, drv->ifi);
1342 struct macsec_drv_data *drv = priv;
1343 struct macsec_genl_ctx *ctx = &drv->ctx;
1347 SCISTR, drv->ifname, sa->an,
1350 ret = set_active_tx_sa(ctx, drv->ifi, sa->an, true);
1356 drv->encoding_sa_set = true;
1357 drv->encoding_sa = sa->an;
1359 return try_commit(drv);
1371 struct macsec_drv_data *drv = priv;
1372 struct macsec_genl_ctx *ctx = &drv->ctx;
1375 SCISTR, drv->ifname, sa->an,
1378 return set_active_tx_sa(ctx, drv->ifi, sa->an, false);
1384 struct macsec_drv_data *drv = priv;
1396 drv->common.ifname, drv->ifi,
1397 drv->ifname, drv->parent_ifi);
1466 static int macsec_drv_init_sockets(struct macsec_drv_data *drv, u8 *own_addr)
1472 drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE));
1473 if (drv->common.sock < 0) {
1479 if (eloop_register_read_sock(drv->common.sock, macsec_drv_handle_read,
1480 drv->common.ctx, NULL)) {
1486 os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
1487 if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) {
1499 if (bind(drv->common.sock, (struct sockaddr *) &addr, sizeof(addr)) < 0)
1506 if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex,
1514 os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
1515 if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) {
1538 struct macsec_drv_data *drv;
1540 drv = os_zalloc(sizeof(struct macsec_drv_data));
1541 if (drv == NULL) {
1547 drv->common.ctx = hapd;
1548 os_strlcpy(drv->common.ifname, params->ifname,
1549 sizeof(drv->common.ifname));
1550 drv->use_pae_group_addr = params->use_pae_group_addr;
1552 if (macsec_drv_init_sockets(drv, params->own_addr)) {
1553 os_free(drv);
1557 return drv;
1563 struct macsec_drv_data *drv = priv;
1565 if (drv->common.sock >= 0) {
1566 eloop_unregister_read_sock(drv->common.sock);
1567 close(drv->common.sock);
1570 os_free(drv);
1578 struct macsec_drv_data *drv = priv;
1593 os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr,
1601 res = send(drv->common.sock, (u8 *) hdr, len, 0);