예제 #1
0
lagopus_result_t
channel_mgr_controller_set(const char *channel_name,
                           datastore_controller_role_t role,
                           datastore_controller_connection_type_t type) {
  uint32_t ofp_role, prev_role;
  lagopus_result_t ret;
  struct channel *chan;

  ret = channel_mgr_channel_lookup_by_name(channel_name, &chan);
  if (ret != LAGOPUS_RESULT_OK) {
    return ret;
  }

  prev_role = channel_role_get(chan);

  switch (role) {
    case DATASTORE_CONTROLLER_ROLE_EQUAL:
      ofp_role = OFPCR_ROLE_EQUAL;
      break;
    case DATASTORE_CONTROLLER_ROLE_MASTER:
      ofp_role = OFPCR_ROLE_MASTER;
      break;
    case DATASTORE_CONTROLLER_ROLE_SLAVE:
      ofp_role = OFPCR_ROLE_SLAVE;
      break;
    default:
      return LAGOPUS_RESULT_INVALID_ARGS;
  }

  channel_role_set(chan, ofp_role);

  if (type == DATASTORE_CONTROLLER_CONNECTION_TYPE_MAIN) {
    ret = channel_auxiliary_set(chan, false);
  } else if (type == DATASTORE_CONTROLLER_CONNECTION_TYPE_AUXILIARY) {
    ret = channel_auxiliary_set(chan, true);
  } else {
    channel_role_set(chan, prev_role);
    return LAGOPUS_RESULT_INVALID_ARGS;
  }

  if (ret != LAGOPUS_RESULT_OK) {
    channel_role_set(chan, prev_role);
    return ret;
  }

  return LAGOPUS_RESULT_OK;
}
예제 #2
0
void
test_channel_auxiliary_get_set(void) {
    bool is_auxiliary;
    lagopus_result_t ret;
    struct channel *channel;

    channel = s_create_data_channel();

    /* Call func. */
    ret = channel_auxiliary_set(channel, true);
    TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret,
                              "channel_auxiliary_set() error.");
    ret = channel_auxiliary_get(channel, &is_auxiliary);
    TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret,
                              "channel_auxiliary_get() error.");
    TEST_ASSERT_EQUAL_MESSAGE(is_auxiliary, true,
                              "auxiliary error.");

    session_destroy(channel_session_get(channel));
    free(channel);
}