示例#1
0
bool
fw3_ubus_connect(void)
{
	bool status = false;
	uint32_t id;
	struct ubus_context *ctx = ubus_connect(NULL);
	struct blob_buf b = { };

	if (!ctx)
		goto out;

	if (ubus_lookup_id(ctx, "network.interface", &id))
		goto out;

	if (ubus_invoke(ctx, id, "dump", NULL, dump_cb, NULL, 2000))
		goto out;

	status = true;

	if (ubus_lookup_id(ctx, "service", &id))
		goto out;

	blob_buf_init(&b, 0);
	blobmsg_add_string(&b, "type", "firewall");
	ubus_invoke(ctx, id, "get_data", b.head, procd_data_cb, NULL, 2000);
	blob_buf_free(&b);

out:
	if (ctx)
		ubus_free(ctx);
	return status;
}
示例#2
0
文件: ubus.c 项目: sevennothing/lros
/**
 * find all VLAN in database with summary 
 * used to VLAN module.
 *
 * */
int ubus_vlan_checkout_message(void)
{
	blob_buf_init(&b, 0);                                                                                                                                                              
    blobmsg_add_u8(&b, "mode", 0);

    ubus_invoke(ctx, id, "find", b.head, vlanlist_checkout_callback, NULL, timeout * 1000);
	
	return LR_SUCCESS;
}
示例#3
0
文件: ubus.c 项目: sevennothing/lros
int ubus_bind_port(u16 vlanid, u16 portid, bool bind)
{
	blob_buf_init(&b, 0);                                                                                                                                                              
	blobmsg_add_u16(&b, "vid", vlanid);
	blobmsg_add_u8(&b, "portid", (u8)portid);
	blobmsg_add_u8(&b, "bind", bind ? true : false);

    ubus_invoke(ctx, id, "port", b.head, swVlan_result_data, NULL, timeout * 1000);
	
	return LR_SUCCESS;
}
示例#4
0
文件: ubus.c 项目: sevennothing/lros
int ubus_find_vlan_message(u16 vlanid)
{
	blob_buf_init(&b, 0);                                                                                                                                                              
    blobmsg_add_u8(&b, "mode", 1);
	blobmsg_add_u16(&b, "vid", vlanid);

    ubus_invoke(ctx, id, "find", b.head, swVlan_result_data, NULL, timeout * 1000);
	

	return LR_SUCCESS;
}
示例#5
0
文件: ubus.c 项目: sevennothing/lros
int ubus_vlan_create_message(u16 vlanid, u8 mstid)
{
	blob_buf_init(&b, 0);                                                                                                                                                              
    blobmsg_add_u16(&b, "vid", vlanid);
	
	if(mstid > 0 && mstid < 64)
		blobmsg_add_u8(&b, "mstid", mstid);

    ubus_invoke(ctx, id, "new", b.head, create_vlan_callback, NULL, timeout * 1000);
	
	return LR_SUCCESS;
}
示例#6
0
文件: ubus.c 项目: sevennothing/lros
int ubus_vlan_delete_message(u16 vlanid, bool all)
{
	u8 dsgMode = 1;
	blob_buf_init(&b, 0);                                                                                                                                                              
	if(all){
		dsgMode = 0;
	}else{
		blobmsg_add_u16(&b, "vid", vlanid);
		dsgMode = 1;
	}
    blobmsg_add_u8(&b, "mode", dsgMode);

    ubus_invoke(ctx, id, "delete", b.head, delete_vlan_callback, NULL, timeout * 1000);
	
	return LR_SUCCESS;
}
示例#7
0
int UBusRequest::Invoke(const char *method, blob_attr *b)
{
	int ret = 0;

	ILOG_TRACE(UBUS_REQ);

	ILOG_DEBUG(UBUS_REQ, "%s enter\n", __func__);
	ret = ubus_invoke(_ubus, _id, method, b , data_cb, this, 0);
	if (ret) {
		ILOG_ERROR(UBUS_REQ,"ubus_invoke failed [id=%d, method=%s, err=%s]\n",
			  _id, method, ubus_strerror(ret));
		return ret;
	}
	
	ILOG_DEBUG(UBUS_REQ,"ubus_invoke done [id=%d, method=%s]\n",
		  _id, method, ubus_strerror(ret));

	ILOG_DEBUG(UBUS_REQ, "%s exit\n", __func__);
	return 0;
}
示例#8
0
文件: ubus.c 项目: sevennothing/lros
/* find all VLAN in database with detail */
int ubus_find_all_vlan_message(bool summary)
{
	u8 mode = 3;
	if(summary)
		mode = 0;

	blob_buf_init(&b, 0);                                                                                                                                                              
    blobmsg_add_u8(&b, "mode", mode);

    ubus_invoke(ctx, id, "find", b.head, swVlan_result_data, NULL, timeout * 1000);
	/*
	struct ubus_request req;
    ubus_invoke_async(ctx, id, "find", b.head, &req);
	ubus_complete_request_async(ctx,&req);
	swVlan_result_data();
	*/


	return LR_SUCCESS;
}
示例#9
0
static int client_ubus_process(char *ubus_object, char *ubus_method, char *argv)
{
  static struct ubus_request req;
  uint32_t id;
  int ret, ret_ubus_invoke;
  const char *ubus_socket = NULL;
  struct ubus_context *ctx_local;

  ctx_local = ubus_connect(ubus_socket);
  if (!ctx_local) {
    printf("Failed to connect to ubus\n");
    return -1;
  }

  if (ubus_lookup_id(ctx_local, ubus_object, &id)) {
    printf("Failed to look up test object\n");
    return -1;
  }

  blob_buf_init(&b_local, 0);

  blobmsg_add_string(&b_local, "cmd", argv);

  ret_ubus_invoke = ubus_invoke(ctx_local, id, ubus_method, b_local.head, receive_call_result_data, 0, 20000);
 
  if(ret_ubus_invoke == 0 || ret_ubus_invoke == 7)
  {
    ret = 0;
  }
  else
  {
    ret = -1;
  }

  ubus_free(ctx_local);
  return ret;
}
示例#10
0
static void init_loop_cb(struct uloop_timeout *timeout)
{
	uint32_t id;
	// replace *d
    char key_iv[32] = {0};

    char repeater_pubkey[] = "-----BEGIN PUBLIC KEY-----\n"\
            "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyUF9+Td53E0lEqP8eRyM\n"\
            "DoREPIety4BJscApuPwcGxiVA+75mYw8AFKlTaWlLL7w/qyuxnOiNm6TTFCxJGI1\n"\
            "C9GnABm8myC5hnDSC6qE+E1Al6wZgyI4rkC+Qr7GFI9B8r9bM+RdKyMxD9JuXUcx\n"\
            "+rx/TPnJttUfAkCloYStd5LiCel6c/bfWiR5hyxLjXC5Cz5cdpzXwvyvgEBvZHxX\n"\
            "A5jqPVfWcJ3P3s88ogPxx52iM4dzLtzWB6BOmZA/3SbvZle2Efy7mVAl/9gkwvgf\n"\
            "Dm/TSnMbnUBim3H5CIlECsvs2RuvI5og0S3oEO4B8TQQjujSqbA6h+EcZc9Djmh2\n"\
            "vQIDAQAB\n"\
            "-----END PUBLIC KEY-----\n";

    unsigned char  *encrypted=malloc(MAX_ALLOC_LEN);
    unsigned char  *base64=malloc(MAX_ALLOC_LEN);
    RAND_seed(rnd_seed, sizeof rnd_seed);       /* or RSA_PKCS1_PADDING/OAEP may fail */

    random_uuid(repeater_key);
    random_uuid(repeater_iv);

    memcpy(key_iv, repeater_key, 16);
    memcpy(key_iv+16, repeater_iv, 16);

    int encrypted_length= public_encrypt(key_iv,
                                         32,
                                         repeater_pubkey,
                                         encrypted);
    if(encrypted_length == -1)
    {
        printLastError("Public Encrypt failed ");
        exit(0);
    }
    printf("Encrypted length =%d\n",encrypted_length);
    printf("Try to init_loop_cb...\n");

    int base64_length = base64Encode(base64, encrypted, encrypted_length);
    // printf("base64 len: %d\n", base64_length);
    // printf("base64: %s\n", base64);

	if(ubus_lookup_id(sys->tbus_ctx, "netapi", &id)){
		dlog("can't lookup netapi\n");
		goto fail;
	}

	blob_buf_init(&traffic_b, 0);
	blobmsg_add_field(&traffic_b, BLOBMSG_TYPE_UNSPEC,
			"data", base64, base64_length);
	ubus_invoke(sys->tbus_ctx, id, "init", traffic_b.head,
			receive_call_result_data, NULL, TRAFFICD_INIT_TIMEOUT);

    free(encrypted);
    free(base64);
	return;

fail:
    free(encrypted);
    free(base64);
	uloop_timeout_set(&sd->timeout_init, TRAFFICD_INIT_LOOP_TIME);
}