コード例 #1
0
ファイル: conf.c プロジェクト: Alkhliws/projfin-hmip
static void conf_default(struct mip6_config *c)
{
	memset(c, 0, sizeof(*c));

	/* Common options */
#ifdef ENABLE_VT
	c->vt_hostname = VT_DEFAULT_HOSTNAME;
	c->vt_service = VT_DEFAULT_SERVICE;
#endif
	c->mip6_entity = MIP6_ENTITY_CN;
	pmgr_init(NULL, &conf.pmgr);
	INIT_LIST_HEAD(&c->net_ifaces);
	INIT_LIST_HEAD(&c->bind_acl);
	c->DefaultBindingAclPolicy = IP6_MH_BAS_ACCEPTED;

	/* IPsec options */
	c->UseMnHaIPsec = 1;
	INIT_LIST_HEAD(&c->ipsec_policies);

	/* MN options */
	c->MnMaxHaBindingLife = MAX_BINDING_LIFETIME;
	c->MnMaxCnBindingLife = MAX_RR_BINDING_LIFETIME;
	tssetdsec(c->InitialBindackTimeoutFirstReg_ts, 1.5);/*seconds*/
	tssetsec(c->InitialBindackTimeoutReReg_ts, INITIAL_BINDACK_TIMEOUT);/*seconds*/
	INIT_LIST_HEAD(&c->home_addrs);
	c->MoveModulePath = NULL; /* internal */
	c->DoRouteOptimizationMN = 1;
	c->SendMobPfxSols = 1;
	c->OptimisticHandoff = 0;

	/* HA options */
	c->SendMobPfxAdvs = 1;
	c->SendUnsolMobPfxAdvs = 1;
	c->MaxMobPfxAdvInterval = 86400; /* seconds */
	c->MinMobPfxAdvInterval = 600; /* seconds */
	c->HaMaxBindingLife = MAX_BINDING_LIFETIME;

	/* CN bindings */
	c->DoRouteOptimizationCN = 1;
}
コード例 #2
0
ファイル: conf.c プロジェクト: mspublic/openair4G-mirror
static void conf_default(struct mip6_config *c)
{
	int i;
	memset(c, 0, sizeof(*c));

	/* Common options */
#ifdef ENABLE_VT
	c->vt_hostname = VT_DEFAULT_HOSTNAME;
	c->vt_service = VT_DEFAULT_SERVICE;
#endif
	c->mip6_entity = MIP6_ENTITY_CN;
	pmgr_init(NULL, &conf.pmgr);
	INIT_LIST_HEAD(&c->net_ifaces);
	INIT_LIST_HEAD(&c->bind_acl);
	c->DefaultBindingAclPolicy = IP6_MH_BAS_ACCEPTED;

	/* IPsec options */
	c->UseMnHaIPsec = 1;
	INIT_LIST_HEAD(&c->ipsec_policies);

	/* MN options */
	c->MnMaxHaBindingLife = MAX_BINDING_LIFETIME;
	c->MnMaxCnBindingLife = MAX_RR_BINDING_LIFETIME;
	tssetdsec(c->InitialBindackTimeoutFirstReg_ts, 1.5);/*seconds*/
	tssetsec(c->InitialBindackTimeoutReReg_ts, INITIAL_BINDACK_TIMEOUT);/*seconds*/
	INIT_LIST_HEAD(&c->home_addrs);
	c->MoveModulePath = NULL; /* internal */
	c->DoRouteOptimizationMN = 1;
	c->MobRtrUseExplicitMode = 1;
	c->SendMobPfxSols = 1;
	c->OptimisticHandoff = 0;

	/* HA options */
	c->SendMobPfxAdvs = 1;
	c->SendUnsolMobPfxAdvs = 1;
	c->MaxMobPfxAdvInterval = 86400; /* seconds */
	c->MinMobPfxAdvInterval = 600; /* seconds */
	c->HaMaxBindingLife = MAX_BINDING_LIFETIME;
	INIT_LIST_HEAD(&c->nemo_ha_served_prefixes);


	/* PMIP global options */
	c->RFC5213TimestampBasedApproachInUse = 1;
	c->RFC5213MobileNodeGeneratedTimestampInUse = 1;
	c->RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = in6addr_any;
	c->RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = in6addr_any;
	struct timespec lifetime_tunnels;
	lifetime_tunnels.tv_sec  = 60;
	lifetime_tunnels.tv_nsec = 0;
	c->MaxDelayBeforeDynamicTunnelingDelete   = lifetime_tunnels; // 60000 milliseconds

	/* PMIP LMA options */
	struct timespec lifetime1;
	lifetime1.tv_sec = 10;
	lifetime1.tv_nsec = 0;
	c->RFC5213MinDelayBeforeBCEDelete         = lifetime1; // 10000 milliseconds
	struct timespec lifetime2;
	lifetime2.tv_sec = 1;
	lifetime2.tv_nsec = 500000000;
	c->RFC5213MaxDelayBeforeNewBCEAssign      = lifetime2; // 1500 milliseconds
	struct timespec lifetime3;
	lifetime3.tv_sec = 0;
	lifetime3.tv_nsec = 300000000;
	c->RFC5213TimestampValidityWindow         = lifetime3; // 300 milliseconds


	/* CN bindings */
	c->DoRouteOptimizationCN = 1;

	/* PMIP MAG options */
	c->RFC5213EnableMAGLocalRouting = 0;
	c->HomeNetworkPrefix             = in6addr_any;
	c->NumMags                       = 0;
	for (i = 0; i <  PMIP_MAX_MAGS; i++) {
		c->MagAddressIngress[i]      = in6addr_loopback;
		c->MagAddressEgress[i]       = in6addr_loopback;
	}
	c->MagDeviceIngress              = "";
	c->MagDeviceEgress               = "";
	c->LmaAddress                    = in6addr_loopback;
	c->OurAddress                    = in6addr_loopback;
	//Lifetime for PB entry
	struct timespec lifetime4;
	lifetime4.tv_sec  = 40;
	lifetime4.tv_nsec = 0;
	c->PBULifeTime    = lifetime4;
	struct timespec lifetime5;
	lifetime5.tv_sec  = 40;
	lifetime5.tv_nsec = 0;
	c->PBALifeTime    = lifetime5;
	//Time for N_Retransmissions
	struct timespec lifetime6;
	lifetime6.tv_sec  = 1;
	lifetime6.tv_nsec = 0;
	c->RetransmissionTimeOut = lifetime6;
	//Define the maximum # of message retransmissions.
	int Max_rets = 5;
	c->MaxMessageRetransmissions = Max_rets;
	c->TunnelingEnabled          = 0;
	c->DynamicTunnelingEnabled   = 0;
	c->RadiusClientConfigFile    = "";
	c->RadiusPassword            = "";

}
コード例 #3
0
/*
static void conf_default(struct mip6_config *c)
{
    memset(c, 0, sizeof(*c));

    // Common options
#ifdef ENABLE_VT
    c->vt_hostname = VT_DEFAULT_HOSTNAME;
    c->vt_service = VT_DEFAULT_SERVICE;
#endif
    c->mip6_entity = MIP6_ENTITY_CN;
    pmgr_init(NULL, &conf.pmgr);
    INIT_LIST_HEAD(&c->net_ifaces);
    INIT_LIST_HEAD(&c->bind_acl);
    c->DefaultBindingAclPolicy = IP6_MH_BAS_ACCEPTED;

    // IPsec options
    c->UseMnHaIPsec = 1;
    INIT_LIST_HEAD(&c->ipsec_policies);

    // MN options
    c->MnMaxHaBindingLife = MAX_BINDING_LIFETIME;
    c->MnMaxCnBindingLife = MAX_RR_BINDING_LIFETIME;
    tssetdsec(c->InitialBindackTimeoutFirstReg_ts, 1.5);//seconds
    tssetsec(c->InitialBindackTimeoutReReg_ts, INITIAL_BINDACK_TIMEOUT);//seconds
    INIT_LIST_HEAD(&c->home_addrs);
    c->MoveModulePath = NULL; // internal
    c->DoRouteOptimizationMN = 1;
    c->SendMobPfxSols = 1;
    c->OptimisticHandoff = 0;

    // HA options
    c->SendMobPfxAdvs = 1;
    c->SendUnsolMobPfxAdvs = 1;
    c->MaxMobPfxAdvInterval = 86400; // seconds
    c->MinMobPfxAdvInterval = 600; // seconds
    c->HaMaxBindingLife = MAX_BINDING_LIFETIME;

    // CN bindings
    c->DoRouteOptimizationCN = 1;
}
*/
static void conf_default(struct mip6_config *c)
{
    memset(c, 0, sizeof(*c));

    // Common options
#ifdef ENABLE_VT
    c->vt_hostname = VT_DEFAULT_HOSTNAME;
    c->vt_service = VT_DEFAULT_SERVICE;
#endif
    c->mip6_entity = MIP6_ENTITY_CN;
    pmgr_init(NULL, &conf.pmgr);
    INIT_LIST_HEAD(&c->net_ifaces);
    INIT_LIST_HEAD(&c->bind_acl);
    c->DefaultBindingAclPolicy = IP6_MH_BAS_ACCEPTED;

    // IPsec options
    c->UseMnHaIPsec = 0;
    INIT_LIST_HEAD(&c->ipsec_policies);

    // MN options
    c->MnMaxHaBindingLife = MAX_BINDING_LIFETIME;
    c->MnMaxCnBindingLife = MAX_RR_BINDING_LIFETIME;
    tssetdsec(c->InitialBindackTimeoutFirstReg_ts, 1.5);//seconds
    tssetsec(c->InitialBindackTimeoutReReg_ts, INITIAL_BINDACK_TIMEOUT);//seconds
    INIT_LIST_HEAD(&c->home_addrs);
    c->MoveModulePath = NULL; // internal
    c->DoRouteOptimizationMN = 1;
    c->SendMobPfxSols = 1;
    c->OptimisticHandoff = 0;

    // HA options
    c->SendMobPfxAdvs = 1;
    c->SendUnsolMobPfxAdvs = 1;
    c->MaxMobPfxAdvInterval = 86400; // seconds
    c->MinMobPfxAdvInterval = 600; // seconds
    c->HaMaxBindingLife = MAX_BINDING_LIFETIME;

    // CN bindings
    c->DoRouteOptimizationCN = 1;

    //Default Values for variables.
    c->HomeNetworkPrefix = in6addr_any;
    c->MagAddressIngress = in6addr_loopback;
    c->MagAddressEgress  = in6addr_loopback;
    c->LmaAddress        = in6addr_loopback;
    c->OurAddress        = in6addr_loopback;
    //Lifetime for PB entry
    struct timespec lifetime1;  //15 sec
    //lifetime1.tv_sec = 60;
    lifetime1.tv_sec = 1000;
    lifetime1.tv_nsec = 0;
    c->PBULifeTime = lifetime1;
    struct timespec lifetime2;  //15 sec
    //lifetime2.tv_sec = 30;
    lifetime2.tv_sec = 1000;
    lifetime2.tv_nsec = 0;
    c->PBALifeTime = lifetime2;
    //Time for N_Retransmissions
    struct timespec lifetime3;  // 0.5 sec
    lifetime3.tv_sec = 5;
    lifetime3.tv_nsec = 0;
    c->NRetransmissionTime = lifetime3;
    //Define the maximum # of message retransmissions.
    int Max_rets = 5;
    c->MaxMessageRetransmissions = Max_rets;
    c->TunnelingEnabled          = 0;
    c->DynamicTunnelingEnabled   = 0;
    c->RadiusClientConfigFile    = "";
    c->RadiusPassword            = "";

}
コード例 #4
0
int mh_bu_parse(struct ip6_mh_binding_update *bu, ssize_t len,
		const struct in6_addr_bundle *in_addrs,
		struct in6_addr_bundle *out_addrs,
		struct mh_options *mh_opts,
		struct timespec *lifetime, uint8_t *key)
{
	struct in6_addr *our_addr, *peer_addr, *remote_coa;
	struct ip6_mh_opt_altcoa *alt_coa;
	struct ip6_mh_opt_nonce_index *non_ind;
	struct ip6_mh_opt_auth_data *bauth;
	uint16_t bu_flags;
	int ret;

	MDBG("Binding Update Received\n");
	if (len < sizeof(struct ip6_mh_binding_update) ||
	    mh_opt_parse(&bu->ip6mhbu_hdr, len,
			 sizeof(struct ip6_mh_binding_update), mh_opts) < 0)
		return -1;

	peer_addr = in_addrs->src;
	if (!in6_is_addr_routable_unicast(peer_addr))
		return -1;

	remote_coa = in_addrs->remote_coa;
	if (remote_coa && !IN6_ARE_ADDR_EQUAL(remote_coa, peer_addr))
		out_addrs->remote_coa = remote_coa;
	else
		out_addrs->remote_coa = NULL;

	alt_coa = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_ALTCOA);
	if (alt_coa)
		out_addrs->bind_coa = &alt_coa->ip6moa_addr;
	else
		out_addrs->bind_coa = in_addrs->remote_coa;

	our_addr = in_addrs->dst;
	tsclear(*lifetime);
	if (out_addrs->bind_coa) {
		if (!in6_is_addr_routable_unicast(out_addrs->bind_coa))
			return -1;
		if (!IN6_ARE_ADDR_EQUAL(out_addrs->bind_coa, peer_addr)) {
			/* check that there is no circular reference */
			if (bce_exists(our_addr, out_addrs->bind_coa))
				return -1;
			tssetsec(*lifetime, ntohs(bu->ip6mhbu_lifetime) << 2);
		}
	}
	/* Use Home address of MN for calculating BU and BA auth data
	 * for deregs. */
	if (!out_addrs->bind_coa)
		out_addrs->bind_coa = in_addrs->src;

	bu_flags = bu->ip6mhbu_flags;
	out_addrs->src = in_addrs->dst;
	out_addrs->dst = in_addrs->src;
	out_addrs->local_coa = NULL;

	non_ind = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_NONCEID);

	if (bu_flags & IP6_MH_BU_HOME)
		return non_ind ? -1 : 0;

	if (!non_ind)
		return -1;

	MDBG("src %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(peer_addr));
	MDBG("coa %x:%x:%x:%x:%x:%x:%x:%x\n",
	     NIP6ADDR(out_addrs->bind_coa));

	if (tsisset(*lifetime))
		ret = rr_cn_calc_Kbm(ntohs(non_ind->ip6moni_home_nonce),
				     ntohs(non_ind->ip6moni_coa_nonce),
				     peer_addr, out_addrs->bind_coa, key);
	else /* Only use home nonce and address for dereg. */
		ret = rr_cn_calc_Kbm(ntohs(non_ind->ip6moni_home_nonce), 0,
				     peer_addr, NULL, key);
	if (ret)
		return ret;

	bauth = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_BAUTH);
	if (!bauth)
		return -1;
	/* Authenticator is calculated with MH checksum set to 0 */
	bu->ip6mhbu_hdr.ip6mh_cksum = 0;
	if (mh_verify_auth_data(bu, len, bauth,
				out_addrs->bind_coa, our_addr, key) < 0)
		return -1;

	return IP6_MH_BAS_ACCEPTED;
}