コード例 #1
0
ファイル: rrl.c プロジェクト: gitter-badger/knot
bool rrl_slip_roll(int n_slip)
{
    /* Now n_slip means every Nth answer slips.
     * That represents a chance of 1/N that answer slips.
     * Therefore, on average, from 100 answers 100/N will slip. */
    int threshold = RRL_SLIP_MAX / n_slip;
    int roll = dnssec_random_uint16_t() % RRL_SLIP_MAX;
    return (roll < threshold);
}
コード例 #2
0
ファイル: exec.c プロジェクト: gitter-badger/knot
knot_pkt_t* create_empty_packet(const size_t max_size)
{
    // Create packet skeleton.
    knot_pkt_t *packet = knot_pkt_new(NULL, max_size, NULL);
    if (packet == NULL) {
        DBG_NULL;
        return NULL;
    }

    // Set random sequence id.
    knot_wire_set_id(packet->wire, dnssec_random_uint16_t());

    return packet;
}
コード例 #3
0
ファイル: handlers.c プロジェクト: idtek/knot
/*! \brief Create zone query packet. */
static knot_pkt_t *zone_query(const zone_t *zone, uint16_t pkt_type, knot_mm_t *mm)
{
	/* Determine query type and opcode. */
	uint16_t query_type = KNOT_RRTYPE_SOA;
	uint16_t opcode = KNOT_OPCODE_QUERY;
	switch(pkt_type) {
	case KNOT_QUERY_AXFR: query_type = KNOT_RRTYPE_AXFR; break;
	case KNOT_QUERY_IXFR: query_type = KNOT_RRTYPE_IXFR; break;
	case KNOT_QUERY_NOTIFY: opcode = KNOT_OPCODE_NOTIFY; break;
	}

	knot_pkt_t *pkt = knot_pkt_new(NULL, KNOT_WIRE_MAX_PKTSIZE, mm);
	if (pkt == NULL) {
		return NULL;
	}

	knot_wire_set_id(pkt->wire, dnssec_random_uint16_t());
	knot_wire_set_opcode(pkt->wire, opcode);
	if (pkt_type == KNOT_QUERY_NOTIFY) {
		knot_wire_set_aa(pkt->wire);
	}

	knot_pkt_put_question(pkt, zone->name, KNOT_CLASS_IN, query_type);

	/* Put current SOA (optional). */
	zone_contents_t *contents = zone->contents;
	if (pkt_type == KNOT_QUERY_IXFR) {  /* RFC1995, SOA in AUTHORITY. */
		knot_pkt_begin(pkt, KNOT_AUTHORITY);
		knot_rrset_t soa_rr = node_rrset(contents->apex, KNOT_RRTYPE_SOA);
		knot_pkt_put(pkt, KNOT_COMPR_HINT_QNAME, &soa_rr, 0);
	} else if (pkt_type == KNOT_QUERY_NOTIFY) { /* RFC1996, SOA in ANSWER. */
		knot_pkt_begin(pkt, KNOT_ANSWER);
		knot_rrset_t soa_rr = node_rrset(contents->apex, KNOT_RRTYPE_SOA);
		knot_pkt_put(pkt, KNOT_COMPR_HINT_QNAME, &soa_rr, 0);
	}

	return pkt;
}
コード例 #4
0
ファイル: tcp-handler.c プロジェクト: idtek/knot
/*! \brief Calculate TCP throttle time (random). */
static inline int tcp_throttle() {
	return TCP_THROTTLE_LO + (dnssec_random_uint16_t() % TCP_THROTTLE_HI);
}