3662 for (i = 0; i < anamecnt; i++) |
3662 for (i = 0; i < anamecnt; i++) |
3663 adr_name_rele(anamearr[i]); |
3663 adr_name_rele(anamearr[i]); |
3664 free(anamearr); |
3664 free(anamearr); |
3665 } |
3665 } |
3666 |
3666 |
3667 uint64_t |
3667 void |
3668 solaris_flow_walk(void *arg, struct ofpbuf *action, boolean_t no_default, |
3668 solaris_flow_walk(void *arg, struct ofpbuf *action, |
3669 void (*fn)(void *, const char *, boolean_t, struct flow *, struct flow *, |
3669 void (*fn)(void *, const char *, struct flow *, struct flow *, |
3670 struct ofpbuf *, uint64_t, uint64_t, uint64_t)) |
3670 struct ofpbuf *, uint64_t, uint64_t, uint64_t)) |
3671 { |
3671 { |
3672 adr_name_t **anamearr = NULL; |
3672 adr_name_t **anamearr = NULL; |
3673 int anamecnt = 0, i; |
3673 int anamecnt = 0, i; |
3674 rc_err_t rerr; |
3674 rc_err_t rerr; |
3675 int err = 0; |
3675 int err = 0; |
3676 uint64_t n_flows = 0; |
|
3677 |
3676 |
3678 rerr = dlmgr_Flow__rad_list(rad_conn, B_FALSE, NS_GLOB, &anamearr, |
3677 rerr = dlmgr_Flow__rad_list(rad_conn, B_FALSE, NS_GLOB, &anamearr, |
3679 &anamecnt, 0); |
3678 &anamecnt, 0); |
3680 if (rerr != RCE_OK) |
3679 if (rerr != RCE_OK) |
3681 return (0); |
3680 return; |
3682 |
3681 |
3683 if (anamecnt == 0) { |
3682 if (anamecnt == 0) { |
3684 free(anamearr); |
3683 free(anamearr); |
3685 return (0); |
3684 return; |
3686 } |
3685 } |
3687 |
3686 |
3688 for (i = 0; i < anamecnt; i++) { |
3687 for (i = 0; i < anamecnt; i++) { |
3689 dlmgr__rad_dict_string_DLValue_t *flowinfo; |
3688 dlmgr__rad_dict_string_DLValue_t *flowinfo; |
3690 char linkname[MAXLINKNAMELEN]; |
3689 char linkname[MAXLINKNAMELEN]; |
3694 const char *props[1]; |
3693 const char *props[1]; |
3695 const char *fields[1]; |
3694 const char *fields[1]; |
3696 struct flow f, m; |
3695 struct flow f, m; |
3697 int ndlist = 0; |
3696 int ndlist = 0; |
3698 uint64_t npackets, nbytes, lastused; |
3697 uint64_t npackets, nbytes, lastused; |
3699 boolean_t is_default; |
|
3700 dlmgr_DatalinkError_t *derrp = NULL; |
3698 dlmgr_DatalinkError_t *derrp = NULL; |
3701 |
3699 |
3702 flowinfo = NULL; |
3700 flowinfo = NULL; |
3703 dlist = NULL; |
3701 dlist = NULL; |
3704 dlval = NULL; |
3702 dlval = NULL; |
3705 is_default = B_FALSE; |
|
3706 if (strstr(adr_name_key(anamearr[i], "name"), "defflow") != |
3703 if (strstr(adr_name_key(anamearr[i], "name"), "defflow") != |
3707 NULL) { |
3704 NULL) { |
3708 if (no_default) |
3705 continue; |
3709 continue; |
|
3710 else |
|
3711 is_default = B_TRUE; |
|
3712 } else if (strstr(adr_name_key(anamearr[i], "name"), |
3706 } else if (strstr(adr_name_key(anamearr[i], "name"), |
3713 "sys.of") == NULL) { |
3707 "sys.of") == NULL) { |
3714 continue; |
3708 continue; |
3715 } |
3709 } |
3716 |
3710 |
3790 "failed for %s: %d", adr_name_key(anamearr[i], |
3784 "failed for %s: %d", adr_name_key(anamearr[i], |
3791 "name"), err); |
3785 "name"), err); |
3792 goto done; |
3786 goto done; |
3793 } |
3787 } |
3794 |
3788 |
3795 if (action != NULL) { |
3789 err = solaris_flowinfo2action(flowinfo, action); |
3796 err = solaris_flowinfo2action(flowinfo, action); |
3790 if (err != 0) { |
3797 if (err != 0) { |
3791 dpif_log(err, "solaris_flow_walk " |
3798 dpif_log(err, "solaris_flow_walk " |
3792 "flowinfo2action failed for %s: %d", |
3799 "flowinfo2action failed for %s: %d", |
3793 adr_name_key(anamearr[i], "name"), err); |
3800 adr_name_key(anamearr[i], "name"), err); |
3794 goto done; |
3801 goto done; |
3795 } |
3802 } |
3796 |
3803 } |
3797 fn(arg, adr_name_key(anamearr[i], "name"), &f, &m, action, |
3804 |
3798 npackets, nbytes, lastused); |
3805 if (fn != NULL) { |
|
3806 fn(arg, adr_name_key(anamearr[i], "name"), is_default, |
|
3807 &f, &m, action, npackets, nbytes, lastused); |
|
3808 } |
|
3809 n_flows++; |
|
3810 done: |
3799 done: |
3811 dlmgr__rad_dict_string_DLValue_free(flowinfo); |
3800 dlmgr__rad_dict_string_DLValue_free(flowinfo); |
3812 dlmgr_DLValue_free(dlval); |
3801 dlmgr_DLValue_free(dlval); |
3813 dlmgr_DLDict_array_free(dlist, ndlist); |
3802 dlmgr_DLDict_array_free(dlist, ndlist); |
3814 } |
3803 } |
3815 |
3804 |
3816 for (i = 0; i < anamecnt; i++) |
3805 for (i = 0; i < anamecnt; i++) |
3817 adr_name_rele(anamearr[i]); |
3806 adr_name_rele(anamearr[i]); |
3818 free(anamearr); |
3807 free(anamearr); |
3819 |
|
3820 return (n_flows); |
|
3821 } |
3808 } |
3822 |
3809 |
3823 int |
3810 int |
3824 solaris_dladm_status2error(dladm_status_t status) |
3811 solaris_dladm_status2error(dladm_status_t status) |
3825 { |
3812 { |