Ejemplo n.º 1
0
int zone_contents_add_rr(zone_contents_t *z, const knot_rrset_t *rr,
                         zone_node_t **n)
{
	if (z == NULL || rr == NULL) {
		return KNOT_EINVAL;
	}

	return insert_rr(z, rr, n, rrset_is_nsec3rel(rr));
}
Ejemplo n.º 2
0
/** enter data RR into auth zone */
static int
lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr)
{
	uint8_t* nm;
	size_t nmlen;
	int nmlabs;
	struct local_data* node;
	struct local_rrset* rrset;
	struct packed_rrset_data* pd;
	uint16_t rrtype = 0, rrclass = 0;
	time_t ttl = 0;
	uint8_t rr[LDNS_RR_BUF_SIZE];
	uint8_t* rdata;
	size_t rdata_len;
	if(!get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr),
		&rdata, &rdata_len)) {
		log_err("bad local-data: %s", rrstr);
		return 0;
	}
	log_assert(z->dclass == rrclass);
	if(z->type == local_zone_redirect &&
		query_dname_compare(z->name, nm) != 0) {
		log_err("local-data in redirect zone must reside at top of zone"
			", not at %s", rrstr);
		free(nm);
		return 0;
	}
	nmlabs = dname_count_size_labels(nm, &nmlen);
	if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) {
		free(nm);
		return 0;
	}
	log_assert(node);
	free(nm);

	rrset = local_data_find_type(node, rrtype);
	if(!rrset) {
		rrset = new_local_rrset(z->region, node, rrtype, rrclass);
		if(!rrset)
			return 0;
		if(query_dname_compare(node->name, z->name) == 0) {
			if(rrtype == LDNS_RR_TYPE_NSEC)
			  rrset->rrset->rk.flags = PACKED_RRSET_NSEC_AT_APEX;
			if(rrtype == LDNS_RR_TYPE_SOA)
				z->soa = rrset->rrset;
		}
	} 
	pd = (struct packed_rrset_data*)rrset->rrset->entry.data;
	log_assert(rrset && pd);

	/* check for duplicate RR */
	if(rr_is_duplicate(pd, rdata, rdata_len)) {
		verbose(VERB_ALGO, "ignoring duplicate RR: %s", rrstr);
		return 1;
	} 
	return insert_rr(z->region, pd, rdata, rdata_len, ttl);
}
Ejemplo n.º 3
0
void roundrun_init(char chose)
{
PCB *p;
int i,time;
char na[10];
ready=NULL;
finish=NULL;
run=NULL;
	printf("\t\t循环轮转算法模拟全过程\n\n");
					printf("输入进程 的个数 N:\n");
					scanf("%d",&N);
for(i=0;i<N;i++)
{
p=(PCB*)malloc(sizeof(PCB));
   printf("输入第%d个进程名\n",i+1);
scanf("%s",na);
   printf("完成进程需要的时间片数\n");
scanf("%d",&time);
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->count=0;
p->state='W';
p->round=2;
if(ready!=NULL)
{
insert_rr(p);
}
else
{
    p->next=ready;
    ready=p;
    tail=p;
}
printf("当前就绪队列的进程的信息\n");
print(chose);
}
	printf("%d个进程已按FIFO进到就绪队列中\n",N);
					printf("按回车键开始模循环轮转算法.....\n");
					fflush(stdin);
					getchar();
run=ready;
ready=ready->next;
run->state='R';
     
}
Ejemplo n.º 4
0
void roundrun(char chose)
 {
	int i=1;
while(run!=NULL)
{
run->cputime+=1;
run->needtime-=1;
run->count+=1;
if(run->needtime==0)
{
    run->next=finish;
   finish=run;
   run->state='F';
   run->prio=0;
   run=NULL;
   if(ready!=NULL)
   {
      firstin();
    }         
   }
   else
   {
     if(run->count==run->round)
     {
     run->count=0; 
     if(ready!=NULL)
   {        
      run->state='W';
      insert_rr(run);
      firstin();
   }
    }
   }
   print(chose);
}
getchar();
}