Lines Matching defs:fcf
98 * @fcf: The FCF to check
102 static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf)
104 return (fcf->flags & FIP_FL_SOL) != 0;
109 * @fcf: The FCF to check
113 static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf)
117 return (fcf->flags & flags) == flags;
203 * The fcoe_sysfs layer can return a CONNECTED fcf that
204 * has a priv (fcf was never deleted) or a CONNECTED fcf
205 * that doesn't have a priv (fcf was deleted). However,
272 struct fcoe_fcf *fcf;
276 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
277 fcoe_sysfs_fcf_del(fcf);
321 struct fcoe_fcf *fcf;
328 list_for_each_entry(fcf, &fip->fcfs, list)
329 fcf->flogi_sent = 0;
374 * @fcf: The destination FCF (if NULL, a multicast solicitation is sent)
376 static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf)
397 memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN);
429 if (!fcf)
542 struct fcoe_fcf *fcf;
544 fcf = fip->sel_fcf;
546 if (!fcf || (ports && !lp->port_id))
556 memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN);
614 struct fcoe_fcf *fcf;
630 fcf = fip->sel_fcf;
631 if (!fcf)
633 fip_flags = fcf->flags;
638 memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN);
821 struct fcoe_fcf *fcf;
833 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
834 deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2;
835 if (fip->sel_fcf == fcf) {
841 fip->lp->host->host_no, fcf->fabric_name,
847 deadline += fcf->fka_period;
849 if (fip->sel_fcf == fcf)
856 list_del(&fcf->list);
857 list_add(&fcf->list, &del_list);
862 if (fcoe_ctlr_mtu_valid(fcf) &&
863 (!sel_time || time_before(sel_time, fcf->time)))
864 sel_time = fcf->time;
869 list_for_each_entry_safe(fcf, next, &del_list, list) {
870 /* Removes fcf from current list */
871 fcoe_sysfs_fcf_del(fcf);
886 * @fcf: The resulting FCF entry
892 struct sk_buff *skb, struct fcoe_fcf *fcf)
904 memset(fcf, 0, sizeof(*fcf));
905 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA);
908 fcf->flags = ntohs(fiph->fip_flags);
936 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri;
942 memcpy(fcf->fcf_mac,
945 memcpy(fcf->fcoe_mac, fcf->fcf_mac, ETH_ALEN);
946 if (!is_valid_ether_addr(fcf->fcf_mac)) {
949 fcf->fcf_mac);
958 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn);
965 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn);
966 fcf->vfid = ntohs(fab->fd_vfid);
967 fcf->fc_map = ntoh24(fab->fd_map);
975 fcf->fd_flags = 1;
978 fcf->fka_period = msecs_to_jiffies(t);
998 if (!fcf->fc_map || (fcf->fc_map & 0x10000))
1000 if (!fcf->switch_name)
1022 struct fcoe_fcf *fcf;
1035 list_for_each_entry(fcf, &fip->fcfs, list) {
1036 if (fcf->switch_name == new.switch_name &&
1037 fcf->fabric_name == new.fabric_name &&
1038 fcf->fc_map == new.fc_map &&
1039 ether_addr_equal(fcf->fcf_mac, new.fcf_mac)) {
1048 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC);
1049 if (!fcf)
1052 memcpy(fcf, &new, sizeof(new));
1053 fcf->fip = fip;
1054 rc = fcoe_sysfs_fcf_add(fcf);
1059 kfree(fcf);
1069 fcf->fd_flags = new.fd_flags;
1070 if (!fcoe_ctlr_fcf_usable(fcf))
1071 fcf->flags = new.flags;
1073 if (fcf == fip->sel_fcf && !fcf->fd_flags) {
1074 fip->ctlr_ka_time -= fcf->fka_period;
1079 fcf->fka_period = new.fka_period;
1080 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN);
1083 mtu_valid = fcoe_ctlr_mtu_valid(fcf);
1084 fcf->time = jiffies;
1087 fcf->fabric_name, fcf->fcf_mac);
1094 fcoe_ctlr_solicit(fip, fcf);
1112 list_move(&fcf->list, &fip->fcfs);
1119 fcoe_ctlr_fcf_usable(fcf)) {
1321 struct fcoe_fcf *fcf = fip->sel_fcf;
1333 if (!fcf) {
1351 if (!ether_addr_equal(eh->h_source, fcf->fcf_mac)) {
1409 if (!ether_addr_equal(mp->fd_mac, fcf->fcf_mac))
1417 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name)
1625 struct fcoe_fcf *fcf;
1628 list_for_each_entry(fcf, &fip->fcfs, list) {
1632 fcf->fabric_name, fcf->vfid, fcf->fcf_mac,
1633 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf),
1634 fcf->flogi_sent, fcf->pri);
1635 if (!fcoe_ctlr_fcf_usable(fcf)) {
1638 fcf->fabric_name, fcf->fc_map,
1639 (fcf->flags & FIP_FL_SOL) ? "" : "in",
1640 (fcf->flags & FIP_FL_AVAIL) ?
1644 if (!best || fcf->pri < best->pri || best->flogi_sent)
1645 best = fcf;
1646 if (fcf->fabric_name != best->fabric_name ||
1647 fcf->vfid != best->vfid ||
1648 fcf->fc_map != best->fc_map) {
1715 struct fcoe_fcf *fcf;
1721 fcf = fcoe_ctlr_select(fip);
1722 if (!fcf || fcf->flogi_sent) {
1746 struct fcoe_fcf *fcf;
1749 fcf = fip->sel_fcf;
1750 if (!fcf || !fip->flogi_req_send)
1759 if (fcf->flogi_sent) {
1761 fcf = fcoe_ctlr_select(fip);
1762 if (!fcf || fcf->flogi_sent) {
1764 list_for_each_entry(fcf, &fip->fcfs, list)
1765 fcf->flogi_sent = 0;
1766 fcf = fcoe_ctlr_select(fip);
1769 if (fcf) {
1805 struct fcoe_fcf *fcf;
1817 fcf = fip->sel_fcf;
1831 else if (!sel && fcf)
2922 fip->mode == FIP_MODE_VN2VN ? "vn2vn" : "fcf",
3226 struct fcoe_fcf *fcf;
3231 fcf = fcoe_fcf_device_priv(fcf_dev);
3232 if (fcf)
3233 fcf_dev->selected = (fcf == fip->sel_fcf) ? 1 : 0;