On Mon, Apr 24, 2017 at 10:04 PM, Guru Shetty <g...@ovn.org> wrote: > > > On 17 April 2017 at 08:13, <nusid...@redhat.com> wrote: > >> From: Numan Siddique <nusid...@redhat.com> >> >> This patch adds a new OVN action 'dns_lookup' to support native DNS. >> ovn-controller parses this action and adds a NXT_PACKET_IN2 >> OF flow with 'pause' flag set. >> >> A new table 'DNS' is added in the SB DB to look up and resolve >> the DNS queries. When a valid DNS packet is received by >> ovn-controller, it looks up the DNS name in the 'DNS' table >> and if successful, it frames a DNS reply, resumes the packet >> and stores 1 in the 1-bit subfield. If the packet is invalid >> or cannot be resolved, it resumes the packet without any >> modifications and stores 0 in the 1-bit subfield. >> >> reg0[4] = dns_lookup(); next; >> >> An upcoming patch will use this action and adds logical flows. >> >> Signed-off-by: Numan Siddique <nusid...@redhat.com> >> > > Acked-by: Gurucharan Shetty <g...@ovn.org> > > This needs a rebase as it does not apply on the tip of master. > > One comment inline. > > >> >> >> + <table name="DNS" title="Native DNS resolution"> >> + <p> >> + Each row in this table stores the DNS records. The OVN action >> + <code>dns_lookup</code> uses this table for DNS resolution. >> + </p> >> + >> + <column name="records"> >> + Key-value pair of DNS records with <code>hostname</code> as the key >> + and a string of IP address(es) separated by comma or space as the >> + value. >> > > "hostname" feels like a misnomer as even LB VIPs can be programmed in the > DNS table. A better option is to use "DNS name"? >
Thanks for the review. I will rebase, update the key to "dnsname". Hope this name is fine Numan > > >> + >> + <p><b>Example: </b> "vm1.ovn.org" = "10.0.0.4 aef0::4"</p> >> + </column> >> + >> + <column name="datapaths"> >> + The DNS records defined in the column <ref column="records"/> will >> be >> + applied only to the DNS queries originating from the datapaths >> defined >> + in this column. >> + </column> >> + >> + <group title="Common Columns"> >> + <column name="external_ids"> >> + See <em>External IDs</em> at the beginning of this document. >> + </column> >> + </group> >> + </table> >> </database> >> diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c >> index ffa931a..79a51e9 100644 >> --- a/ovn/utilities/ovn-sbctl.c >> +++ b/ovn/utilities/ovn-sbctl.c >> @@ -1056,6 +1056,9 @@ static const struct ctl_table_class >> tables[SBREC_N_TABLES] = { >> >> [SBREC_TABLE_SSL].row_ids[0] = >> {&sbrec_table_sb_global, NULL, &sbrec_sb_global_col_ssl}, >> + >> + [SBREC_TABLE_DNS].row_ids[0] = >> + {&sbrec_table_dns, NULL, &sbrec_dns_col_records}, >> }; >> >> >> diff --git a/ovn/utilities/ovn-trace.c b/ovn/utilities/ovn-trace.c >> index 66844b1..b141203 100644 >> --- a/ovn/utilities/ovn-trace.c >> +++ b/ovn/utilities/ovn-trace.c >> @@ -1428,6 +1428,18 @@ execute_next(const struct ovnact_next *next, >> trace__(dp, uflow, next->ltable, next->pipeline, super); >> } >> >> + >> +static void >> +execute_dns_lookup(const struct ovnact_dns_lookup *dl, struct flow >> *uflow, >> + struct ovs_list *super) >> +{ >> + struct mf_subfield sf = expr_resolve_field(&dl->dst); >> + union mf_subvalue sv = { .u8_val = 0 }; >> + mf_write_subfield_flow(&sf, &sv, uflow); >> + ovntrace_node_append(super, OVNTRACE_NODE_ERROR, >> + "*** dns_lookup action not implemented"); >> +} >> + >> static void >> trace_actions(const struct ovnact *ovnacts, size_t ovnacts_len, >> const struct ovntrace_datapath *dp, struct flow *uflow, >> @@ -1542,6 +1554,10 @@ trace_actions(const struct ovnact *ovnacts, size_t >> ovnacts_len, >> * though, it would be easy enough to track the queue >> information >> * by adjusting uflow->skb_priority. */ >> break; >> + >> + case OVNACT_DNS_LOOKUP: >> + execute_dns_lookup(ovnact_get_DNS_LOOKUP(a), uflow, super); >> + break; >> } >> >> } >> diff --git a/tests/ovn.at b/tests/ovn.at >> index af77c19..53a2dd5 100644 >> --- a/tests/ovn.at >> +++ b/tests/ovn.at >> @@ -1027,6 +1027,13 @@ set_queue(61440); >> set_queue(65535); >> Queue ID 65535 for set_queue is not in valid range 0 to 61440. >> >> +# dns_lookup >> +reg1[0] = dns_lookup(); >> + encodes as controller(userdata=00.00.00.0 >> 6.00.00.00.00.00.01.de.10.00.00.00.40,pause) >> + has prereqs udp >> +reg1[0] = dns_lookup("hostname"); >> + dns_lookup doesn't take any parameters >> + >> # Contradictionary prerequisites (allowed but not useful): >> ip4.src = ip6.src[0..31]; >> encodes as move:NXM_NX_IPV6_SRC[0..31]->NXM_OF_IP_SRC[] >> -- >> 2.9.3 >> >> _______________________________________________ >> dev mailing list >> d...@openvswitch.org >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev