--- /dev/null
+#include <frsh.h>
+#include <error.h>
+#include <res_dummy.h>
+
+#define N 3
+
+int b[N] = { 10, 20, 30 };
+
+int main(int argc, char *argv[])
+{
+ int ret;
+ frsh_contract_t contract[N];
+ frsh_vres_id_t vres[N];
+ frsh_rel_time_t budget, period, deadline;
+ frsh_signal_info_t si;
+ int i;
+
+ ret = frsh_init();
+ if (ret) PERROR_AND_EXIT(ret, "frsh_init");
+
+ /* Negotiate N contracts */
+ for (i=0; i<N; i++) {
+ ret = frsh_contract_init(&contract[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_init");
+
+ ret = frsh_contract_set_resource_and_label(
+ &contract[i],
+ FRSH_RT_NETWORK, FRSH_NETPF_FWP,
+ NULL);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
+
+ frsh_network_bytes_to_budget(FRSH_NETPF_FWP, b[i], &budget);
+ period = fosa_msec_to_rel_time(1000);
+ deadline = fosa_msec_to_rel_time(500);
+ ret = frsh_contract_set_basic_params(&contract[i],
+ &budget,
+ &period,
+ FRSH_WT_BOUNDED,
+ FRSH_CT_REGULAR);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
+
+ ret = frsh_contract_set_timing_reqs(&contract[i],
+ false, &deadline,
+ 0, si, 0, si);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
+
+ ret = frsh_contract_negotiate(&contract[i], &vres[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
+ }
+ for (i=0; i<N; i++) {
+ frsh_network_bytes_to_budget(FRSH_NETPF_FWP, 2*b[i], &budget);
+ period = fosa_msec_to_rel_time(1100);
+ ret = frsh_contract_set_basic_params(&contract[i],
+ &budget,
+ &period,
+ FRSH_WT_BOUNDED,
+ FRSH_CT_REGULAR);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params reneg");
+
+ ret = frsh_contract_renegotiate_sync(&contract[i], vres[i]);
+
+ }
+
+ /* Cancel N contracts */
+ for (i=0; i<N; i++) {
+ ret = frsh_contract_cancel(vres[i]);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_cancel");
+ }
+ return 0;
+}