Portál AbcLinuxu, 6. května 2025 23:07

Dotaz: Linux bridge, 2x Catalyst a STP

12.5.2013 20:33 fish | skóre: 22
Linux bridge, 2x Catalyst a STP
Přečteno: 766×
Odpovědět | Admin
Zdravim,

potreboval bych radu od nekoho s praktickou zkusenosti s STP bridgem. Mam cluster ctyr stroju, plus jeden jako router, pripojene kvuli failover do dvou Catalystu 2960. Mezi Catalysty je etherchannel ze dvou portu, ve stacku nejsou (nemaji Flexstack moduly). Konfigurace vsech ctyr stroju je shodna (viz nize), ctyrportova sitova karta, dva porty pro datovy bridge a dva pro cluster. V bridgi je pokazde jeden port v prvnim a druhy v druhem switchi. Predpokladal jsem, ze postaci na bridgi zapnout STP a stroj se domluvi se switchem. Momentalne je ale situace takova, ze porty na PC vetsinou skonci oba ve stavu forwarding a na Catalystu "nahodne" forwarding/blocking. Nektere stroje se vidi mezi sebou, nektere vidi router, ale nemuzu se dostat do stavu, ze vsichni spolehlive uvidi vsechny ostatni. Zkousel jsem nekolik variant, ale uz nevim jakym smerem se zamerit, pripadne co zkontrolovat. Momentalne nevim, jestli delam chybu na strane PC nebo v Catalystu. Dalsi casti konfigurace doplnim podle potreby, budu rad za kazdou radu.

diky

PS: aby to nebylo tak jednoduchy, plan je takovy, ze router bude do kazdeho switche pripojeny etherchannelem ze dvou portu. Kazda z tech dvojic sama o sobe mi funguje, ale pri spojeni do bridge vzdy skonci oba ve forwarding a komunikace se zacykli. Momentalne mam jeden ze spoju odpojeny. Predpokladam, ze by to nemelo zpusobit problemy na ostatnich bridgich, protoze je to ocekavatelna situace (vypadek jednoho spoje).

konfigurace XEN node:
auto eth0.502
iface eth0.502 inet manual
auto eth2.502
iface eth2.502 inet manual
auto eth1
iface eth1 inet manual
auto eth3
iface eth3 inet manual

auto xenbr0
iface xenbr0 inet static
        address 10.2.0.X
        netmask 255.255.255.0
        network 10.2.0.0
        broadcast 10.2.0.255
        gateway 10.2.0.1
        bridge_ports eth0.502 eth2.502
        bridge_stp on

auto cluster0
iface cluster0 inet static
        address 172.29.1.X
        netmask 255.255.255.0
        network 172.29.1.0
        broadcast 172.29.1.255
        bridge_ports eth1 eth3
        bridge_stp on
konfigurace GW:
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto eth2
iface eth2 inet manual
auto eth3
iface eth3 inet manual
auto eth4
iface eth4 inet manual
auto eth5
iface eth5 inet manual

auto ebond0
iface ebond0 inet static
    address A.B.C.D
    netmask A.B.C.D
    network A.B.C.D
    broadcast A.B.C.D
    gateway A.B.C.D
    bond-slaves eth0 eth1
    bond-mode 4
    bond-primary eth0 eth1
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

auto ibond0
iface ibond0 inet manual
    bond-slaves eth2 eth4
    bond-mode 4
    bond-primary eth2 eth4
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

auto ibond1
iface ibond1 inet manual
    bond-slaves eth3 eth5
    bond-mode 4
    bond-primary eth3 eth5
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

auto ibr0
iface ibr0 inet manual
#    bridge_ports ibond0 ibond1
    bridge_ports ibond0
    bridge_stp on

auto ibr0.501
iface ibr0.501 inet static
        address 172.29.1.1
        network 172.29.1.0
        netmask 255.255.255.0
        broadcast 172.29.1.255

auto ibr0.502
iface ibr0.502 inet static
        address 10.2.0.1
        network 10.2.0.0
        netmask 255.255.255.0
        broadcast 10.2.0.255

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.5.2013 22:32 NN
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pocitam, ze jeden z tech catalystu je manualne nastaveny jako root bridge a druhy jako secondary root bridge. Je to tak ?
12.5.2013 23:07 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Pocitam, ze ne ;) Diky za tip. Na switchich jsem nekonfiguroval nic jinyho nez VLANy a etherchannely propoje a routeru. Do konfigurace STP jsem nijak nezasahoval. Ted jsem si tedy vygooglil spanning-tree vlan vlan-id root secondary a aplikoval na druhem switchi pro vsechny VLANy. Spojeni stale nefunguje. Prikladam vysledek show spanning-tree vlan 501 (VLAN 501 je nastavena jako access na portech kam miri rozhrani v bridgi cluster0 z uvedene konfigurace):

switch1:
VLAN0501
  Spanning tree enabled protocol ieee
  Root ID    Priority    29173
             Address     04da.d2e9.2980
             Cost        3
             Port        224 (Port-channel1)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    33269  (priority 32768 sys-id-ext 501)
             Address     b4e9.b004.5000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0/29            Desg FWD 4         128.29   P2p
Gi1/0/30            Desg FWD 4         128.30   P2p
Gi1/0/35            Desg FWD 4         128.35   P2p
Po1                 Root FWD 3         128.224  P2p
Po2                 Desg FWD 3         128.232  P2p
switch2:
VLAN0501
  Spanning tree enabled protocol ieee
  Root ID    Priority    29173
             Address     04da.d2e9.2980
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    29173  (priority 28672 sys-id-ext 501)
             Address     04da.d2e9.2980
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0/29            Desg FWD 4         128.29   P2p
Gi1/0/30            Desg FWD 4         128.30   P2p
Gi1/0/35            Desg FWD 4         128.35   P2p
Po1                 Desg FWD 3         128.224  P2p
Je neco dalsiho co bych mel zkontrolovat?
12.5.2013 23:25 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Tak cast problemu byla zpusobena moji vlastni blbosti. Doslo mi to po tom co jsem postnul prislusny vypis - bylo tam o dva porty min nez by melo byt (kabely byly v jinych portech). Porad mi ale nejde do hlavy, proc maji oba switche souvisejici port (napr. SW1 Gi1/0/29 - SW2 Gi1/0/29) forwarding, stejne tak je ma PC. Nemel by jeden z nich byt blocking?
13.5.2013 09:28 NN
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Chtelo by to nakreslit schema, vetne vlan. Btw. porty do root bridge = sw2 jsou vzdy FWD. Pro kazdou VLAN existuje samostatny STP strom.
13.5.2013 11:32 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Zkusim neco namalovat. Kazdopadne po tech upravach mi vsechno komunikuje, chyby jsem nezaznamenal. Ale pokud zapojim router do obou switchu, tak tim ze oba smery (Po2 na SW1 i SW2) jsou forwarding, zacnou switche hlasit mac flapping a ztraceji se pakety. Nechci delat loadbalancing nad obema switchi, aby nektere VLANy tekly primarne po jednom a jine po druhem, ale nevim jak docilit toho, aby veskera komunikace probihala nad jednim switchem, smerem z PC do druheho bylo vsechno blocking a jen v pripade, ze umre prvni switch/jeho port, odblokuje se zalozni spoj PC pres druhy switch. Premyslim, ze mozna bude lepsi reseni bond v active-backup rezimu, ale predpokladal jsem, ze by to melo jit vyresit i pomoci STP na urovni switche.
13.5.2013 11:40 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Mas smulu. U Cisco pracuji kreteni, kteri si vymysleli vlastni STP, ktere neni pri pouziti VLAN se zbytkem sveta kompatibilni.
13.5.2013 13:00 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
To by vysvetlovalo, proc na PC s konfiguraci z puvodniho dotazu vidim u bridge cluster0 nad access porty forward-blocking, ale u brige xenbr0, ktery je nad vlanou v ramci trunk portu, je forward-forward :( Nejaka sance jak to obejit?
13.5.2013 14:56 ET
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Mas smulu. U Cisco pracuji kreteni, kteri si vymysleli vlastni STP
hehe, nebylo to nahodou cisco, kdo STP vymyslel? :)

Jinak se na ciscu urcite da zvolit kompatibilni verze STP - docela dobre to ma popsany samuraj
13.5.2013 18:51 NN
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Max avatar 14.5.2013 06:50 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Spíš si chtěl napsat, že geniové, ne? Pokud nechceš používat PVST od cisca, tak se můžeš patlat s kompatibilním MSTP. Nevidím problém. Řešil jsem to zde : HP ProCurve 2810 - VLAN - STP. Koukám, že jsi v diskusi i ty. Teď, když mám MSTP v malíku, tak musím konstatovat, že je to parádní věc, ale co jsem četl o PVST, tak si tím cisco docela ulehčilo život. Kdo má tedy samé cisco zařízení, tak je PVST jasná volba.
Zdar Max
Měl jsem sen ... :(
14.5.2013 09:31 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Ten blog jsem cetl, ale v mem pripade to asi s MSTP bude stejny problem jako s RSTP/PVST - podpora v linuxu. Pro oboji je userspace podpora, ale nevypada moc hotove.
vencour avatar 13.5.2013 11:46 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Jestli se nepletu, tak etherchannel rozhazuje provoz podle nějakého pravidla a STP instance je výhradně na úrovni etherchannelu? Tj. vypadá to, jako by stav portů byl takový, že agregace neni (dobře) zapnutá.
Co takovýhle tip ... Etherchannel a STP?
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
vencour avatar 13.5.2013 19:35 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Odpovědět | | Sbalit | Link | Blokovat | Admin
V rychlosti jsem přímou odpověď na daný scénář nenašel a momentálně přístup k testovacímu železu nemám ... tak jen snad modelové video o etherchannelu a STP ... aneb bylo by fajn, kdyby lidi s domněnkama psali, že se domnívaj a jen tuší ...
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
13.5.2013 23:45 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Příloha:
Nemyslim, ze by byl problem v tom etherchannelu (minimalne ne v tom, ktery propojuje switche mezi sebou). Spis to vypada na ten problem s kompatabilitou mezi STP na linuxu a PVST na Catalystu (zkousel jsem i RPVST).

Prikladam STP pro VLAN 502 ve chvili kdy se komunikace cykli:

SW1 show spanning-tree vlan 502
VLAN0502
  Spanning tree enabled protocol rstp
  Root ID    Priority    20982
             Address     b4e9.b004.5000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    20982  (priority 20480 sys-id-ext 502)
             Address     b4e9.b004.5000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0/1             Desg FWD 4         128.1    P2p
Gi1/0/2             Desg FWD 4         128.2    P2p
Po1                 Desg FWD 3         128.224  P2p
Po2                 Desg FWD 3         128.232  P2p
SW2 show spanning-tree vlan 502
VLAN0502
  Spanning tree enabled protocol rstp
  Root ID    Priority    20982
             Address     b4e9.b004.5000
             Cost        3
             Port        224 (Port-channel1)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    29174  (priority 28672 sys-id-ext 502)
             Address     04da.d2e9.2980
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/0/1             Altn BLK 4         128.1    P2p
Gi1/0/2             Desg FWD 4         128.2    P2p
Po1                 Root FWD 3         128.224  P2p
Po2                 Desg FWD 3         128.232  P2p
GW brctl showstp xenbr0
ibr0
 bridge id              8000.001018f5a2ec
 designated root        5001.b4e9b0045000
 root port                 2                    path cost                103
 max age                  20.00                 bridge max age            20.00
 hello time                2.00                 bridge hello time          2.00
 forward delay            15.00                 bridge forward delay      15.00
 ageing time             300.01
 hello timer               0.00                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                 147.79
 flags


ibond0 (1)
 port id                8001                    state                forwarding
 designated root        5001.b4e9b0045000       path cost                100
 designated bridge      8000.001018f5a2ec       message age timer          0.00
 designated port        8001                    forward delay timer        0.00
 designated cost         103                    hold timer                 0.00
 flags                  CONFIG_PENDING

ibond1 (2)
 port id                8002                    state                forwarding
 designated root        5001.b4e9b0045000       path cost                100
 designated bridge      7001.04dad2e92980       message age timer         18.57
 designated port        80e8                    forward delay timer        0.00
 designated cost           3                    hold timer                 0.00
 flags
Host brctl showstp xenbr0
xenbr0
 bridge id              8000.bc305bf90d6c
 designated root        8000.bc305bf90d6c
 root port                 0                    path cost                  0
 max age                  20.00                 bridge max age            20.00
 hello time                2.00                 bridge hello time          2.00
 forward delay            15.00                 bridge forward delay      15.00
 ageing time             300.01
 hello timer               1.27                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                   6.78
 flags


eth0.502 (1)
 port id                8001                    state                forwarding
 designated root        8000.bc305bf90d6c       path cost                  4
 designated bridge      8000.bc305bf90d6c       message age timer          0.00
 designated port        8001                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.26
 flags

eth2.502 (2)
 port id                8002                    state                forwarding
 designated root        8000.bc305bf90d6c       path cost                  4
 designated bridge      8000.bc305bf90d6c       message age timer          0.00
 designated port        8002                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.26
 flags
Jeste jsem prilozil schema aktualniho zapojeni, pro lepsi predstavu. Behem dneska jsem nahradil vsechny bridge na linuxech za bonding active-backup a momentalne to dela co potrebuju. Preklopeni po odpojeni portu trva 15s, coz je pomerne dlouho, ale nevim jestli by RSTP bylo rychlejsi?
vencour avatar 14.5.2013 00:16 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Takže, jestli se nepletu, tak RSTP ještě v kernelu neni? Aspoň v gentoo v 3.8.6 vidim jen klasické STP a u ebtables STP. Zběžně jsem našel něco na sourceforge.
Ohledně Vašeho schématu jsem měl za to, že hledáte něco jiného ... bonding pro server na oba switche, když už máte server se 4 síťovkama ... odkud kam že vám flapovala MAC adresa?
Aneb čekal jsem etherchannel i proti serverům.
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
14.5.2013 08:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Takže, jestli se nepletu, tak RSTP ještě v kernelu neni?

AFAIK ne "ještě" - počítá se s userspace implementací.

vencour avatar 14.5.2013 08:55 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Ještě k připojení serverů ... porty 1+2 do jednoho switche v bondingu a porty 3+4 do druhého switche, to průchozí neni? Switchi totiž nemůže přijít L2 rámec ze dvou portů, pak hlásí flapování a padne zpravidla do error-disable stavu ... víc dopíšu večer.
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
14.5.2013 10:16 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
To by byl momentalne jen krok navic a situaci s STP by to asi nepomohlo. Krome toho, ten switch umi jen 6 etherchannelu, takze bych jich stejne nemohl udelat tolik kolik potrebuju. K prechozimu dotazu: flapuji ruzne MACy (nedohledaval jsem ktere vsechny stroje, ale byl to GW i nejake dalsi servery) mezi Po1 a Po2. GW v tu chvili hlasi received packet on ibond1 with own address as source address.

Jinak tohle schema a vubec pouziti STP je kompromis, puvodne jsem mel v planu udelat etherchannely pro kazdy server nad souvisejicimi porty z obou switchu. Pak bych mel do kazdeho serveru znasobenou konektivitu vykonove i s ochranou proti vypadku. Coz by ovsem vyzadovalo mit ty switche v jednom stacku, coz ve stavajici verzi neumoznuji (ne bez Flexstacku).

Jeste me napadl jeden pokus, ale momentalne pocitam, ze STP opustim a necham tam ten failover bond bez popdpory na strane switche.

vencour avatar 14.5.2013 14:42 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Pokud máte bonding primárně do jednoho switche, tak nemůže být smyčka přes druhý switch.
Jestli počítam dobře, každý switch bude mít jeden etherchannel do každého serveru, na router a na sebe navzájem, to se do šesti vejdete?
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
14.5.2013 14:54 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Ted nevim jestli jste ten etherchannel myslel jako mozne reseni toho problemu s STP nebo jako jeho nahradu, tj. to co jsem nakonec pouzil na GW (dvouportovy LAG do kazdeho switche a nad nimi jeden prepinaci bond kvuli vypadku switche). Kazdopadne sest je bohuzel malo, ve schematu jsem vynechal backup stroj a jeste tam pravdepodobne prijdou dalsi etherchannely pro uplink do jine casti site.
vencour avatar 14.5.2013 15:43 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Noo, lidi Vás asi nebudou mít rádi, když se s něčim mažou a pak jim řeknete, že je to vlastně jinak ...
Jo, etherchannel z dvou portů serveru by měl řešit STP.
Vy máte 2960 a ne 2960G? Takže máte jen 100Mbps porty? A jak se ještě bude projekt rozrůstat?
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
14.5.2013 13:55 fish | skóre: 22
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky vsem za tipy a napady. Po vsech testech jsem dospel k nasledujicim zjistenim (nerikam, ze by neco z uvedenych problemu neslo vyresit, ale uz tomu nemuzu venovat vic casu a stejne by vysledek pravdepodobne nesplnil to co jsem potreboval):

- STP Catalystu ve spojeni s Linuxem funguje bezchybne, pouze pokud jde o access port na switchi

- i pri funkcnim STP je prodleva mezi preklopenim na zalozni linku tak dlouha, ze spolehlive rozbije cluster (cman/corosync - mozna by slo poresit timeouty)

- pozadovane reseni funguje spolehlive pri pouziti bondingu v linuxu proti obema switchum, bond-mode active-backup. V pripade GW jsou tam dva dilci LAG bondy (bond-mode 802.3ad) spojene do nadrazeneho active-backup.

Takze jsem momentalne zmenil vsechny bridge na bondy a na prislusnych portech switche jsem potlacil STP (spanning-tree portfast [trunk]). Vysledek je ten, ktery jsem potreboval. Pri vypadku spoje dojde k temer okamzitemu preklopeni na druhy switch, cluster se nerozpadne. Jedina ciste kosmeticka otazka me jeste napadla: jestli je lepsi udelat ten bond nad fyzickym interfacem a nad nim udelat logicky interface pro kazdou potrebnou VLANu nebo udelat zvlast bond pro kazdou VLANu. Mam vyzkousene, ze funguje oboji. Ta druha varainta by mozna mela smysl, pokud by ovladac sitovky umel pracovat s podporou VLAN primo v HW sitovky. Ale to je ciste moje spekulace.
14.5.2013 14:02 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Linux bridge, 2x Catalyst a STP
Ta druha varainta by mozna mela smysl, pokud by ovladac sitovky umel pracovat s podporou VLAN primo v HW sitovky.

Tohle funguje i s tou první, s níž se tak nějak všeobecně počítá. Naopak, když to uděláte tím druhým způsobem, bude se úplně zbytečně řešit monitoring a failover pro každý bond interface zvlášť (možná tam budou i jiné nevýhody, ale žádná mne z hlavy nenapadá).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.