void xfrm_state_info_print(struct xfrm_usersa_info *xsinfo, struct rtattr *tb[], FILE *fp, const char *prefix, const char *title) { char buf[STRBUF_SIZE]; int force_spi = xfrm_xfrmproto_is_ipsec(xsinfo->id.proto); memset(buf, '\0', sizeof(buf)); xfrm_id_info_print(&xsinfo->saddr, &xsinfo->id, xsinfo->mode, xsinfo->reqid, xsinfo->family, force_spi, fp, prefix, title); if (prefix) STRBUF_CAT(buf, prefix); STRBUF_CAT(buf, "\t"); fputs(buf, fp); fprintf(fp, "replay-window %u ", xsinfo->replay_window); if (show_stats > 0) fprintf(fp, "seq 0x%08u ", xsinfo->seq); if (show_stats > 0 || xsinfo->flags) { __u8 flags = xsinfo->flags; fprintf(fp, "flag "); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_NOECN, "noecn"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_DECAP_DSCP, "decap-dscp"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_NOPMTUDISC, "nopmtudisc"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_WILDRECV, "wildrecv"); if (flags) fprintf(fp, "%x", flags); } if (show_stats > 0) fprintf(fp, " (0x%s)", strxf_mask8(xsinfo->flags)); fprintf(fp, "%s", _SL_); xfrm_xfrma_print(tb, xsinfo->family, fp, buf); if (!xfrm_selector_iszero(&xsinfo->sel)) { char sbuf[STRBUF_SIZE]; memcpy(sbuf, buf, sizeof(sbuf)); STRBUF_CAT(sbuf, "sel "); xfrm_selector_print(&xsinfo->sel, xsinfo->family, fp, sbuf); } if (show_stats > 0) { xfrm_lifetime_print(&xsinfo->lft, &xsinfo->curlft, fp, buf); xfrm_stats_print(&xsinfo->stats, fp, buf); } }
void xfrm_policy_info_print(struct xfrm_userpolicy_info *xpinfo, struct rtattr *tb[], FILE *fp, const char *prefix, const char *title) { char buf[STRBUF_SIZE]; memset(buf, '\0', sizeof(buf)); xfrm_selector_print(&xpinfo->sel, preferred_family, fp, title); if (prefix) STRBUF_CAT(buf, prefix); STRBUF_CAT(buf, "\t"); fputs(buf, fp); fprintf(fp, "dir "); switch (xpinfo->dir) { case XFRM_POLICY_IN: fprintf(fp, "in"); break; case XFRM_POLICY_OUT: fprintf(fp, "out"); break; case XFRM_POLICY_FWD: fprintf(fp, "fwd"); break; default: fprintf(fp, "%u", xpinfo->dir); break; } fprintf(fp, " "); switch (xpinfo->action) { case XFRM_POLICY_ALLOW: if (show_stats > 0) fprintf(fp, "action allow "); break; case XFRM_POLICY_BLOCK: fprintf(fp, "action block "); break; default: fprintf(fp, "action %u ", xpinfo->action); break; } if (show_stats) fprintf(fp, "index %u ", xpinfo->index); fprintf(fp, "priority %u ", xpinfo->priority); if (tb[XFRMA_POLICY_TYPE]) { struct xfrm_userpolicy_type *upt; fprintf(fp, "ptype "); if (RTA_PAYLOAD(tb[XFRMA_POLICY_TYPE]) < sizeof(*upt)) fprintf(fp, "(ERROR truncated)"); upt = (struct xfrm_userpolicy_type *)RTA_DATA(tb[XFRMA_POLICY_TYPE]); fprintf(fp, "%s ", strxf_ptype(upt->type)); } if (show_stats > 0) fprintf(fp, "share %s ", strxf_share(xpinfo->share)); if (show_stats > 0 || xpinfo->flags) { __u8 flags = xpinfo->flags; fprintf(fp, "flag "); XFRM_FLAG_PRINT(fp, flags, XFRM_POLICY_LOCALOK, "localok"); if (flags) fprintf(fp, "%x", flags); } if (show_stats > 0) fprintf(fp, " (0x%s)", strxf_mask8(xpinfo->flags)); fprintf(fp, "%s", _SL_); if (show_stats > 0) xfrm_lifetime_print(&xpinfo->lft, &xpinfo->curlft, fp, buf); xfrm_xfrma_print(tb, xpinfo->sel.family, fp, buf); }
void xfrm_state_info_print(struct xfrm_usersa_info *xsinfo, struct rtattr *tb[], FILE *fp, const char *prefix, const char *title) { char buf[STRBUF_SIZE]; int force_spi = xfrm_xfrmproto_is_ipsec(xsinfo->id.proto); memset(buf, '\0', sizeof(buf)); xfrm_id_info_print(&xsinfo->saddr, &xsinfo->id, xsinfo->mode, xsinfo->reqid, xsinfo->family, force_spi, fp, prefix, title); if (prefix) STRBUF_CAT(buf, prefix); STRBUF_CAT(buf, "\t"); fputs(buf, fp); fprintf(fp, "replay-window %u ", xsinfo->replay_window); if (show_stats > 0) fprintf(fp, "seq 0x%08u ", xsinfo->seq); if (show_stats > 0 || xsinfo->flags) { __u8 flags = xsinfo->flags; fprintf(fp, "flag "); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_NOECN, "noecn"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_DECAP_DSCP, "decap-dscp"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_NOPMTUDISC, "nopmtudisc"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_WILDRECV, "wildrecv"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_ICMP, "icmp"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_AF_UNSPEC, "af-unspec"); XFRM_FLAG_PRINT(fp, flags, XFRM_STATE_ALIGN4, "align4"); if (flags) fprintf(fp, "%x", flags); } if (show_stats > 0 && tb[XFRMA_SA_EXTRA_FLAGS]) { __u32 extra_flags = *(__u32 *)RTA_DATA(tb[XFRMA_SA_EXTRA_FLAGS]); fprintf(fp, "extra_flag "); XFRM_FLAG_PRINT(fp, extra_flags, XFRM_SA_XFLAG_DONT_ENCAP_DSCP, "dont-encap-dscp"); if (extra_flags) fprintf(fp, "%x", extra_flags); } if (show_stats > 0) fprintf(fp, " (0x%s)", strxf_mask8(xsinfo->flags)); fprintf(fp, "%s", _SL_); xfrm_xfrma_print(tb, xsinfo->family, fp, buf); if (!xfrm_selector_iszero(&xsinfo->sel)) { char sbuf[STRBUF_SIZE]; memcpy(sbuf, buf, sizeof(sbuf)); STRBUF_CAT(sbuf, "sel "); xfrm_selector_print(&xsinfo->sel, xsinfo->family, fp, sbuf); } if (show_stats > 0) { xfrm_lifetime_print(&xsinfo->lft, &xsinfo->curlft, fp, buf); xfrm_stats_print(&xsinfo->stats, fp, buf); } if (tb[XFRMA_SEC_CTX]) { struct xfrm_user_sec_ctx *sctx; fprintf(fp, "\tsecurity context "); if (RTA_PAYLOAD(tb[XFRMA_SEC_CTX]) < sizeof(*sctx)) fprintf(fp, "(ERROR truncated)"); sctx = (struct xfrm_user_sec_ctx *)RTA_DATA(tb[XFRMA_SEC_CTX]); fprintf(fp, "%s %s", (char *)(sctx + 1), _SL_); } }