/* C14-9:2 */ if (*hop_ptr && *hop_ptr < hop_cnt) { if (!is_switch) return IB_SMI_DISCARD;
/* return_path set when received */
(*hop_ptr)++; return (initial_path[*hop_ptr] ==
port_num ? IB_SMI_HANDLE : IB_SMI_DISCARD);
}
/* C14-9:3 -- We're at the end of the DR segment of path */ if (*hop_ptr == hop_cnt) { /* return_path set when received */
(*hop_ptr)++; return (is_switch ||
dr_dlid_is_permissive ?
IB_SMI_HANDLE : IB_SMI_DISCARD);
}
/* C14-13:3 -- at the end of the DR segment of path */ if (*hop_ptr == 1) {
(*hop_ptr)--; /* C14-13:3 -- SMPs destined for SM shouldn't be here */ return (is_switch ||
dr_slid_is_permissive ?
IB_SMI_HANDLE : IB_SMI_DISCARD);
}
/* C14-13:4 -- hop_ptr = 0 -> should have gone to SM */ if (*hop_ptr == 0) return IB_SMI_HANDLE;
/* C14-13:5 -- Check for unreasonable hop pointer */ return IB_SMI_DISCARD;
}
}
/* C14-9:3 -- We're at the end of the DR segment of path */ if (*hop_ptr == hop_cnt) { if (hop_cnt)
return_path[*hop_ptr] = port_num; /* hop_ptr updated when sending */
/* C14-13:3 -- We're at the end of the DR segment of path */ if (*hop_ptr == 1) { if (dr_slid_is_permissive) { /* giving SMP to SM - update hop_ptr */
(*hop_ptr)--; return IB_SMI_HANDLE;
} /* hop_ptr updated when sending */ return (is_switch ? IB_SMI_HANDLE : IB_SMI_DISCARD);
}
/* C14-13:4 -- hop_ptr = 0 -> give to SM */ /* C14-13:5 -- Check for unreasonable hop pointer */ return (*hop_ptr == 0 ? IB_SMI_HANDLE : IB_SMI_DISCARD);
}
}
staticenum smi_forward_action __smi_check_forward_dr_smp(u8 hop_ptr, u8 hop_cnt,
u8 direction, bool dr_dlid_is_permissive, bool dr_slid_is_permissive)
{ if (!direction) { /* C14-9:2 -- intermediate hop */ if (hop_ptr && hop_ptr < hop_cnt) return IB_SMI_FORWARD;
/* C14-9:3 -- at the end of the DR segment of path */ if (hop_ptr == hop_cnt) return (dr_dlid_is_permissive ?
IB_SMI_SEND : IB_SMI_LOCAL);
/* C14-9:4 -- hop_ptr = hop_cnt + 1 -> give to SMA/SM */ if (hop_ptr == hop_cnt + 1) return IB_SMI_SEND;
} else { /* C14-13:2 -- intermediate hop */ if (2 <= hop_ptr && hop_ptr <= hop_cnt) return IB_SMI_FORWARD;
/* C14-13:3 -- at the end of the DR segment of path */ if (hop_ptr == 1) return (!dr_slid_is_permissive ?
IB_SMI_SEND : IB_SMI_LOCAL);
} return IB_SMI_LOCAL;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.